我尝试将数据上传到服务器,我的数据包含多张图片和大图片JSON,在此之前,我尝试使用将图片转换为字符串,base64并使用之前发送过的其他数据和图片JSON,但是我OutOfMemory在这里遇到问题,因此,我阅读了其中一种必须尝试使用的解决方案MultipartEntityBuilder。我仍然感到困惑,不知道如何使用它MultiPartEntityBuilder,有没有人可以帮助我使用该方法MultiPartEntityBuilder呢?这是我的代码:
JSON
base64
OutOfMemory
MultipartEntityBuilder
MultiPartEntityBuilder
try{ //membuat HttpClient //membuat HttpPost HttpPost httpPost= new HttpPost(url); SONObject jsonObjectDP= new JSONObject(); System.out.println("file audio "+me.getModelDokumenPendukung().getAudio()); jsonObjectDP.put("audio_dp",MethodEncode.EncodeAudio(me.getModelDokumenPendukung().getAudio())); jsonObjectDP.put("judul_audio",me.getModelDokumenPendukung().getJudul_audio()); jsonObjectDP.put("ket_audio",me.getModelDokumenPendukung().getKet_audio()); JSONArray ArrayFoto= new JSONArray(); //This loop For my multiple File Images List<ModelFoto>ListFoto=me.getModelDokumenPendukung().getListFoto(); for (int i=0; i<ListFoto.size();i++) { JSONObject jsonObject= new JSONObject(); jsonObject.put("foto", ListFoto.get(i).getFile_foto()); jsonObject.put("judul_foto", ListFoto.get(i).getJudul_foto()); jsonObject.put("ket_foto", ListFoto.get(i).getKet_foto()); ArrayFoto.put(jsonObject); } JSONObject JSONESPAJ=null; JSONESPAJ = new JSONObject(); JSONObject JSONFINAL = new JSONObject(); JSONESPAJ.put("NO_PROPOSAL",me.getModelID().getProposal()); JSONESPAJ.put("GADGET_SPAJ_KEY",me.getModelID().getIDSPAJ()); JSONESPAJ.put("NO_VA",me.getModelID().getVa_number()); JSONESPAJ.put("Dokumen_Pendukung",jsonObjectDP); JSONFINAL.put("ESPAJ", JSONESPAJ); JSONFINAL.put("CLIENT", "ANDROID"); JSONFINAL.put("APP", "ESPAJ"); MultipartEntityBuilder multiPartEntityBuilder= MultipartEntityBuilder.create(); multiPartEntityBuilder.addPart("ESPAJ",JSONFINAL.toString()); httpPost.setEntity(multiPartEntityBuilder.build()); HttpResponse httpResponse = httpclient.execute(httpPost); inputStream = httpResponse.getEntity().getContent(); if(inputStream != null) result = convertInputStreamToString(inputStream); else result = "Did not work!"; }catch(OutOfMemoryError e){ Log.e("MEMORY EXCEPTION: ", e.toString()); } catch(ConnectTimeoutException e){ Log.e("Timeout Exception: ", e.toString()); } catch(SocketTimeoutException ste){ Log.e("Timeout Exception: ", ste.toString()); } catch (Exception e) { // Log.d("InputStream", e.getLocalizedMessage()); } private static String convertInputStreamToString(InputStream inputStream) throws IOException{ BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream)); String line = ""; String result = ""; while((line = bufferedReader.readLine()) != null) // hasil=line; result += line; inputStream.close(); return result; }
有没有人可以帮助我教导和告诉我如何使用MultiPartEntityBuilder发送JSON和图像?
要发送二进制数据,您需要使用的addBinaryBody方法MultipartEntityBuilder。附件样本:
addBinaryBody
import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.MultipartEntityBuilder; //Image attaching MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create(); File file; multipartEntity.addBinaryBody("someName", file, ContentType.create("image/jpeg"), file.getName()); //Json string attaching String json; multipartEntity.addPart("someName", new StringBody(json, ContentType.TEXT_PLAIN));
然后像往常一样发出请求:
HttpPut put = new HttpPut("url"); put.setEntity(multipartEntity.build()); HttpResponse response = client.execute(put); int statusCode = response.getStatusLine().getStatusCode();