我阅读了许多有关OOM
的问题,但我仍然被困。我根本无法使用jsonObject.toString
获取数组bytes
。我有相机拍摄的图像,我想将其发送到服务中。我以HTTP帖子的格式发送:
{
request : {
image : encodedImageWithBase64
}
}
,但我无法制作jsonobject原因OOM
。此处的字符串示例来自结果编码的图像:https://pastebin.com/ruxae9vu
在这里我的摘要代码:
JSONObject requestDict = new JSONObject();
try {
JSONArray tempRequestDic = new JSONArray();
JSONObject obj = new JSONObject();
obj.put("imagedata", strEncode64);
tempRequestDic.put(obj);
obj.put("image", tempRequestDic);
requestDict.put("request", obj); /* Here I get the Exception*/
// String strReqDict = String.valueOf(requestDict);
// File x = new File(String.valueOf(requestDict));
byte[] byteBitmapDecoded = requestDict.toString().getBytes(); /* Here my apps force stop cause OOM */
} catch (JSONException e) {
e.printStackTrace();
}
,日志为:
抛出Outofmemoryerror"未能分配301989896字节分配给16777216免费字节和283MB,直到OOM"
我需要此jsonobject中的 byte[]
,但我无法构建jsonobject。
尝试将android:hardwareAccelerated="false"
和android:largeHeap="true"
添加到您的清单中。由于OOM是处理位图时发生的最常见错误。
<application
android:allowBackup="true"
android:hardwareAccelerated="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:theme="@style/AppTheme">
尝试此代码,该代码将将jsonobject转换为bytearray。
byte[] byteBitmapDecoded = Base64.decode(requestDict.toString, Base64.DEFAULT);