在Android中使用MultipartEntityBuilder和HTTP Client发布JSON对象和文件的标准方法是什么

前端之家收集整理的这篇文章主要介绍了在Android中使用MultipartEntityBuilder和HTTP Client发布JSON对象和文件的标准方法是什么前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我可以使用StringEntity发布json对象

httppost.setEntity(newStringEntity(obj.toString()));
HttpResponse response = httpclient.execute(httppost);

但我必须发布一个文件和json数据,我发现很多Answers使用MultipartEntity但它已被弃用,请建议我使用MultipartEntityBuilder的任何教程或示例代码,谢谢
这是我的代码

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\": \"tr0121345899@gmail.com\",\"birthdate\": \"1984-01-01\",\"Account\": {\"username\": \"t1r0123425899\",\"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();
最佳答案
我找到了解决方案,我们可以将json对象拆分为如下,并作为键值发送

  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]","rajesh123458@gmail.com");
                    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
                    }

猜你在找的Android相关文章