我读了很多关于OOM
的问题,但我仍然被困住了。我无法使用jsonObject.toString
来获取数组bytes
。我有一个相机拍摄的图像,我想将其发送到服务中。我用HTTP POST发送格式为:
{
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"无法分配带有16777216个空闲字节的301989896字节分配和283MB直到OOM"
我需要来自此JSONObject的byte[]
,但我无法构建JSONObject本身。
答案 0 :(得分:1)
尝试将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);