Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.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 截击-parseNetworkResponse OutOfMemoryError_Android_Android Volley - Fatal编程技术网

Android 截击-parseNetworkResponse OutOfMemoryError

Android 截击-parseNetworkResponse OutOfMemoryError,android,android-volley,Android,Android Volley,我正在使用截击来管理我的应用程序。有时,当响应很大时,我会在没有太多RAM的设备上获得OOM。我不确定如何解决这个问题。我知道Volley会将其响应存储在内存中,但我的应用程序太多地围绕着Volley,切换起来会很痛苦。我也有使用改装的问题。我尝试过使用JsonReader,但它似乎仍然在发生。我有一个用于截击的自定义请求。它返回一个Gson JsonObject。这是我当前的代码,当响应数据长度返回5511532(5mb)时,应用程序正在接收OOM @覆盖 受保护的响应parseNetwork

我正在使用截击来管理我的应用程序。有时,当响应很大时,我会在没有太多RAM的设备上获得OOM。我不确定如何解决这个问题。我知道Volley会将其响应存储在内存中,但我的应用程序太多地围绕着Volley,切换起来会很痛苦。我也有使用改装的问题。我尝试过使用JsonReader,但它似乎仍然在发生。我有一个用于截击的自定义请求。它返回一个Gson JsonObject。这是我当前的代码,当响应数据长度返回5511532(5mb)时,应用程序正在接收OOM

@覆盖
受保护的响应parseNetworkResponse(NetworkResponse响应){
试一试{
String json=新字符串(response.data,HttpHeaderParser.parseCharset(response.headers));
if(日志头){
Log.d(“GsonResponseHeaders”,response.headers.toString());
}
if(LOG_JSON){
Log.d(“GsonRequestResponse”,json);
}
返回Response.success(gson.fromJson(json,clazz),HttpHeaderParser.parseCacheHeaders(Response));
}捕获(不支持的编码异常e){
返回Response.error(新的ParseError(e));
}捕获(JsonSyntaxException e){
返回Response.error(新的ParseError(e));
}捕获(OutOfMemory错误){
Log.d(“ResponseLength”,“--”+response.data.length);
返回Response.error(新的ParseError(e));
}
}
编辑:

下面是一个抛出OOM的示例响应

GsonRequestResponse:{“用户公司信息”:[{“id”:“1”,“公司id”:“5”,“圆圈id”:“34”,“状态”:“A”,“类别id”:“1”,“公司地图”:“0”,“时间戳”:“2015-07-09 15:28:40”,“添加人”:“1”,“添加日期”:“0000-00-00”,“名称”:“FSM”,“添加日期时间”:“2014-02-12 16:16:51”,“条款”:“FSM公司”,“公司名称”:“Assero Services LLC,“公司id”:“5”、“圈id”:“34”、“状态”:“A”、“类别id”:“1”、“公司地图”:“0”、“时间戳”:“2015-07-09 15:28:40”、“添加人”:“1”、“添加日期”:“0000-00-00”、“圈名称”:“城市地区-HUD合同区-5D”、“创建人”:“2536”、“创建日期”:“0000-00-00”、“圈所有者”:“0”、“圈所有者公司”:“26792”、“圈所有者”:“0”、“圈公司标识符”:“0”、“级别”分配(U)fsm:“26792”,“分配(U)客户端:“25491”,“分配(U)am:“0”,“例程(U)1:“10065”,“例程(U)2:“10209”,“例程(U)3:“10062”,“例程(U)4:“0”,“图像(U)复制(U)api:“Y”,“例程(U)1(U)类型”:null,“例程(U)方法”:null,“例程(U)1(U)取消(U)缓冲区”:null,“例程(U)2(U)类型”:null,“例程(U)类型)”常规方法:null,“常规方法”取消缓冲区:null,“常规方法”类型:null,“常规方法”null,“常规方法”取消缓冲区:null,“名称”:“FSM”,“添加日期时间”:“2014-02-12 16:16:51”,“条款”:“FSM公司”,“可以发行”:“1”},{“id”:“1”,“公司id”:“5”,“圆圈id”:“33”,“状态”:“A”,“cat id”:“1”,“公司地图”:“0”,“时间戳”:“2015-07:09”添加人:“1”,“添加日期”:“0000-00-00”,“circle\u名称”:“Cityside-HUD合同区-4D”,“创建人”:“2536”,“创建日期”:“0000-00-00”,“circle\u所有者”:“0”,“circle\u所有者公司”:“26792”,“circle\u公司标识符”:“0”,“级别”:“外部”,“分配\u fsm”:“26792”,“分配\u客户机”:“25491”,“分配\u am”:“0”,“常规\u 1”:“10065”,“常规\u 2”:“10209”,“常规\u 3”10062,“例程4”:“0”,“图像复制api”:“Y”,“例程1\u类型”:null,“例程1\u方法”:null,“例程1\u取消缓冲区”:null,“例程2\u类型”:null,“例程2\u方法”:null,“例程2\u取消缓冲区”:null,“例程3\u类型”:null,“例程3\u方法”:null,“例程3\u取消缓冲区”:null,“例程4\u类型”:null,“例程4\u方法”:null例行程序4取消缓冲区:null,“名称”:“FSM”,“添加的日期时间”:“2014-02-12 16:16:51”,“条款”:“FSM公司”,“可以发布”:“2”},{“id”:“1”,“公司id”:“5”,“圆圈id”:“32”,“状态”:“A”,“cat id”:“1”,“公司地图”:“0”,“时间戳”:“2015-07-09 15:28:40”,“添加的人”:“1”,“添加的日期”:“0000-00”,“圆圈名称”:“城市地区-HUD合同区-2D”,“创建”:2536,“创建日期”:“0000-00-00”,“圈所有者”:“0”,“圈所有者公司”:“26792”,“圈公司标识符”:“0”,“级别”:“外部”,“分配fsm”:“26792”,“分配客户”:“25491”,“分配am”:“0”,“例程1”:“10065”,“例程2”:“10209”,“例程3”:“0”,“例程4”:“0”,“图像复制api”:“Y”,“例程1类型”:“null”,“例程1方法”:null,”例行程序1\u取消缓冲区:null,“例行程序2\u类型”:null,“例行程序2\u方法”:null,“例行程序2\u取消缓冲区”:null,“例行程序3\u类型”:null,“例行程序3\u方法”:null,“例行程序3\u取消缓冲区”:null,“例行程序4\u类型”:null,“例行程序4\u方法”:null,“例行程序4\u取消缓冲区”:null,“名称”:“FSM”,“添加日期时间”:“2014-02-12 16:16:51”,“条款”:“FSM公司”,“可发行”:1“}

编辑:

嘿,伙计们,所以我尝试拆分我的响应。这似乎有帮助,但在3-4次请求之后,它仍然会给我一个OOM。我相信这与截击有关。这是我的每个响应的GC,它每次都在增长。请注意,堆每次都在增长。我在它们之间放置了一些间距,以便您可以看到堆日志

10-12 06:52:21.236 23515-23515/com.droid.visneta D/RequestQueue:批处理未结订单请求已启动。。。 10-12 06:52:21.236 23515-23855/com.droid.visneta D/GsonCustomHeaders:{UserSession=source=Android-ffffffff-83d1-3e36-ffff-FF99D603A9,id=6,token=9EB7C26405DEFB48 FE884CFEF8000696} 10-12 06:52:21.236 23515-23855/com.droid.visneta I/qtaguid:write_ctrl失败(t-1 4883184842671390720-1)res=-1 errno=9 10-12 06:52:21.236 23515-23855/com.droid.visneta I/qtaguid:为uid-1标记为43c48ebe00000000(1136955070)的标记套接字-1失败错误号=-9 10-12 06:52:21.236 23515-23855/com.droid.visneta I/NetworkManagementSocketTagger:tagSocketFd(-1136955070,-1)失败,错误号为9 10-12 06:52:21.936 23515-23855/com.droid.visneta I/System.out:已从启用的协议中删除SSLv3 10-12 06:52:21.976 23515-23518/com.droid.visneta D/dalvikvm:GC_并发释放1990K,15%释放33771K/39495K,暂停11ms+1ms,总计38ms 10-12 06:52:29.940 23515-23855/com.droid.visneta I/qtaguid:write失败\u ctrl(u-1)res=-1 errno=9 10-12 06:52:29.940 23515-2385
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
    try {
        String json = new String(response.data, HttpHeaderParser.parseCharset(response.headers));

        if (LOG_HEADERS) {
            Log.d("GsonResponseHeaders", response.headers.toString());
        }
        if (LOG_JSON) {
            Log.d("GsonRequestResponse", json);
        }

        return Response.success(gson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response));
    } catch (UnsupportedEncodingException e) {
        return Response.error(new ParseError(e));
    } catch (JsonSyntaxException e) {
        return Response.error(new ParseError(e));
    } catch (OutOfMemoryError e) {
        Log.d("ResponseLength", "-- " + response.data.length);
        return Response.error(new ParseError(e));
    }
}