Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将Encode Base64到JSONObject的字符串结果从内存中取出_Android_Json_Base64_Out Of Memory - Fatal编程技术网

Android 将Encode Base64到JSONObject的字符串结果从内存中取出

Android 将Encode Base64到JSONObject的字符串结果从内存中取出,android,json,base64,out-of-memory,Android,Json,Base64,Out Of Memory,我读了很多关于OOM的问题,但我还是被卡住了。我根本无法使用jsonObject.toString获取数组字节。我有一张用相机拍摄的照片,我想把它发送到一家服务公司。我用HTTP POST发送,格式如下: { request : { image : encodedImageWithBase64 } } 但是我不能做一个JSONObject,因为它是OOM。下面是结果编码图像中的字符串示例: 下面是我的代码片段: JSONObject reques

我读了很多关于OOM的问题,但我还是被卡住了。我根本无法使用jsonObject.toString获取数组字节。我有一张用相机拍摄的照片,我想把它发送到一家服务公司。我用HTTP POST发送,格式如下:

{
 request : {
            image : encodedImageWithBase64
           }
}
但是我不能做一个JSONObject,因为它是OOM。下面是结果编码图像中的字符串示例:

下面是我的代码片段:

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

我需要此JSONObject中的一个字节[],但我无法构建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中。请尝试{JSONObject image=new JSONObject;JSONObject result=new JSONObject;image.putimage,encodedImageBase64;result.putresult,image;Log.dTAG,result:+result;}捕获JSONException e{Log.dTAG,JSONException:+e;}hi@Archana,抱歉响应太慢,largeHeap=true在其工作清单中显示,但仅在某些设备中显示。@MarioMargoPradipta上述代码将为您提供所需的JSON格式,我不知道您为什么要将整个JSON对象转换为字节。因为我需要在Volley上使用post方法体的字节。OOM仍然很少发生,但如果发生这种情况,应用程序将在用户设备上崩溃。不要对要发送到服务器的图像进行base64编码。不要使用json向服务器发送图像。@greenapps,但iOS也使用我的服务。有什么办法吗?
  byte[] byteBitmapDecoded = Base64.decode(requestDict.toString, Base64.DEFAULT);