5

Ich bin in der Lage JSON-Objekt mit StringEntity mitwas ist der normale Weg JSON-Objekt zusammen mit Datei in Android mit MultipartEntityBuilder und HTTP-Client schreiben

httppost.setEntity (newStringEntity (obj.toString())) zu schreiben; HttpResponse Antwort = httpclient.execute (httppost);

aber ich habe eine Datei zusammen mit JSON-Daten zu schreiben, habe ich viele Antworten Mit MultipartEntity gefunden, aber es veraltet ist, Bitte machen Sie mir eine Anleitung oder Beispielcode, den MultipartEntityBuilder verwendet, dank
Hier ist mein Code

Thread t = new Thread(new Runnable() { 

@Override 
public void run() { 

JSONObject jsonobject = null; 

String requestURL = "URL"; 

try { 

jsonobject = new JSONObject("{\"first\": \"Test\",\"last\": \"User\",\"name\": \"Test 
User\",\"email\": \"[email protected]\",\"birthdate\": \"1984-01-01\",\"Account\": {\"username\": \"t1r\",\"password\": \"testuser1234567899\"},\"Address\": {\"postal_code\": \"11230\",\"state_or_province\": \"NY\",\"country\": \"US\"}}"); 
       } catch (JSONException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 



HttpClient httpclient = new DefaultHttpClient(); 

HttpPost httppost = new HttpPost(requestURL); 

httppost.addHeader("Content-Type", "application/json"); 

httppost.addHeader("X-ConsumerApiClient","0f8f0a024d6344e429f5ee96aa66fbfb5c3973b5"); 

httppost.addHeader("X-ConsumerApiSignature", 

        "qmt8aEAGRQUvldkDnHw8zgn1kRYuXRDwvmo3TpWlCtE="); 

MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create(); 
       multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); 

multipartEntity.addPart("file", new FileBody(new 
       File(fileName))); 
multipartEntity.addPart("Person", jsonobject.toString()); 

httppost.setEntity(multipartEntity.build()); 


try { 

    HttpResponse response = httpclient.execute(httppost); 

    Log.d("status", "" + response.getStatusLine()); 

    Log.d("response",EntityUtils.toString(response.getEntity())); 

    } catch (ClientProtocolException e) { 

    } catch (IOException e) { 


} 
} 
}); 

t.start(); 

Antwort

4

ich die Lösung gefunden haben, können wir das jSON-Objekt wie folgt aus und senden als Schlüsselwert geteilt

multipartEntity.addPart("data[Asset][file]", new FileBody(file, 
          ContentType.APPLICATION_OCTET_STREAM, "filename.png")); 
        multipartEntity.addTextBody("data[Person][first]", "kk"); 
        multipartEntity.addTextBody("data[Person][email]", 
          "[email protected]"); 
        multipartEntity.addTextBody("data[Person][birthdate]", 
          "1984-01-01"); 
        multipartEntity.addTextBody("data[Person][Account][username]", 
          "savita123458"); 
        multipartEntity.addTextBody("data[Person][Account][password]", 
          "testuser12345678"); 
     httppost.setEntity(multipartEntity.build()); 
        try { 
         HttpResponse response = httpclient.execute(httppost); 
         Log.d("status", response.getStatusLine().toString()); 

         Log.d("data", EntityUtils.toString(response.getEntity())); 

        } catch (ClientProtocolException e) { 
         e.printStackTrace(); 
        } catch (IOException e) { 
         e.printStackTrace(); // TODO Auto-generated catch block 
        } 
0

Versuchen Sie, dies zu tun.

multipartEntity.addBinaryBody("file", file, ContentType.create("application/octet-stream"), file.getName()); 
multipartEntity.addTextBody("json", jsonobject.toString(), ContentType.DEFAULT_BINARY); 

httppost.setEntity(multipartEntity.build());