在android中发布BASE64图像时发生java.lang.OutOfMemoryError
我在下面的代码中遇到内存不足的异常在android中发布BASE64图像时发生java.lang.OutOfMemoryError,android,json,base64,bitmapimage,android-image,Android,Json,Base64,Bitmapimage,Android Image,我在下面的代码中遇到内存不足的异常 try { String strBase64 = BitMapToString(bitmap); bitmap.recycle(); JSONObject data = new JSONObject(); data.put("image_data", strBase64.toString()); data.put("uploadedBy", "1"); Log.i("JSON DATA", data.toStri
try {
String strBase64 = BitMapToString(bitmap);
bitmap.recycle();
JSONObject data = new JSONObject();
data.put("image_data", strBase64.toString());
data.put("uploadedBy", "1");
Log.i("JSON DATA", data.toString());
HttpClient httpClient = new DefaultHttpClient();
String url = "http://**.**.***.***:91/bisqup/index.php?r=ws/AddAppImage";
HttpPost httpPost = new HttpPost(url);
List<NameValuePair> parameters = new ArrayList<NameValuePair>();
parameters.add(new BasicNameValuePair("data", data.toString()));
httpPost.setEntity(new UrlEncodedFormEntity(parameters));
HttpResponse response = httpClient.execute(httpPost);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
String json = reader.readLine();
JSONTokener tokener = new JSONTokener(json);
JSONObject finalResult = new JSONObject(tokener);
Log.i("Response", "" + finalResult.toString());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
public String BitMapToString(Bitmap bitmap) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
String temp = Base64.encodeToString(b, Base64.DEFAULT);
baos.close();
baos = null;
Log.i("BASE64", temp);
return temp;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
有人能告诉我为什么这段代码会引起内存问题吗
如果您有任何建议,我们将不胜感激。当您将
位图读入字符串时,它很可能太大,这就是为什么会出现OutOfMemory
异常的原因。对于此类请求,您应该使用多部分post
,并使用文件体
而不是字符串
。您可以查看更多详细信息。尝试在不使用JSONObject类的情况下生成JSON对象,这似乎相当简单,因此只需构建字符串即可
String data = "{ image_data: \"" + strBase64.toString() + "\", uploadedBy: \"1\" }";
第134行日志是在post之前还是之后?在任何情况下,使用基于流的json编写器以及基于流的base64编码器这是在json中对象较少的情况下最简单的方法。谢谢。我可以使用多部分POST,但是在web服务方面,它不是为多部分设计的,所以它不能获取我的多部分POST。这是web服务的局限性。但是,是的,多部分是这个问题的解决方案,这很好,我完全同意你的看法。
String data = "{ image_data: \"" + strBase64.toString() + "\", uploadedBy: \"1\" }";