Android 截击-DiskBasedCache OutOfMemory异常-数组大小太大 public void parseInfo(字符串genderTxt2,布尔性别){ 最终字符串URL=“URL”+ “?成人=“+isAdult.toString()+”&gender=“+genderTxt2; info_text.setVisibility(View.GONE); listview_progress.setVisibility(View.VISIBLE); 添加(新的JsonObjectRequest(Request.Method.GET,URL,null,new Response.Listener()){ @凌驾 公共void onResponse(JSONObject响应){ 试一试{ 如果(!fPullToRefreshAttacher.isRefreshing()){ name.clear(); } VolleyLog.v(“响应:%n%s”,响应.toString(4)); 适配器。清除(); parseJSON(响应); }捕获(JSONException e){ e、 printStackTrace(); } } },new Response.ErrorListener(){ @凌驾 公共无效onErrorResponse(截击错误){ //e(“Error:,Error.getMessage().toString()); Toast.makeText(acc,“无法加载名称列表!请检查连接”,Toast.LENGTH_LONG.show(); } })); mRequestQueue.start(); }
非常简单,在许多设备上都可以获得OutOfMemory异常。有什么想法吗Android 截击-DiskBasedCache OutOfMemory异常-数组大小太大 public void parseInfo(字符串genderTxt2,布尔性别){ 最终字符串URL=“URL”+ “?成人=“+isAdult.toString()+”&gender=“+genderTxt2; info_text.setVisibility(View.GONE); listview_progress.setVisibility(View.VISIBLE); 添加(新的JsonObjectRequest(Request.Method.GET,URL,null,new Response.Listener()){ @凌驾 公共void onResponse(JSONObject响应){ 试一试{ 如果(!fPullToRefreshAttacher.isRefreshing()){ name.clear(); } VolleyLog.v(“响应:%n%s”,响应.toString(4)); 适配器。清除(); parseJSON(响应); }捕获(JSONException e){ e、 printStackTrace(); } } },new Response.ErrorListener(){ @凌驾 公共无效onErrorResponse(截击错误){ //e(“Error:,Error.getMessage().toString()); Toast.makeText(acc,“无法加载名称列表!请检查连接”,Toast.LENGTH_LONG.show(); } })); mRequestQueue.start(); },android,android-volley,Android,Android Volley,非常简单,在许多设备上都可以获得OutOfMemory异常。有什么想法吗 我以前也遇到过类似的问题。现在的情况是,在解析之前,您将在内存中获取整个JSON对象。你想要做的是使用某种阅读器来流式处理 从文档: 大多数应用程序应该只使用对象模型API。JSON流在以下几种情况下非常有用: 当无法或不希望将整个对象模型加载到内存中时。这在内存有限的移动平台上最为相关 在文档完全可用之前需要阅读或编写文档时 包括堆栈跟踪。抛出OOM异常的确切位置是哪里?字符串/JSON响应是否非常大?每次响应的大小相
我以前也遇到过类似的问题。现在的情况是,在解析之前,您将在内存中获取整个
JSON
对象。你想要做的是使用某种阅读器来流式处理
从文档:
大多数应用程序应该只使用对象模型API。JSON流在以下几种情况下非常有用:
当无法或不希望将整个对象模型加载到内存中时。这在内存有限的移动平台上最为相关
在文档完全可用之前需要阅读或编写文档时
包括堆栈跟踪。抛出OOM异常的确切位置是哪里?字符串/JSON响应是否非常大?每次响应的大小相同,100项。我现在就发布例外请查看链接above@xBroak很酷的撞车报告服务!无论如何,关于OOM,您能告诉我们响应的大小(例如,在树的深度和字符数方面),还是只显示一个示例?这很奇怪,因为OOM通常是由位图而不是json响应引起的,即使它们非常大……谢谢!HPROF似乎也一直提到位图,但我在启动时没有处理位图,但我的堆几乎满了!我唯一一次使用位图是在一个单独的活动中。这是一个简单的回答,始终有100个条目,每个条目有4个属性,名称、性别、isAdult、Urlet。你知道截击是否支持这一点吗?如何处理?从截取源来看,他们似乎是在按顺序处理
RequestQueue
中的请求,而不是与PriorityBlockingQueue
并行处理。我通过排队意向服务和使用Gson流媒体实现了同样的目的。从这篇文章()来看,似乎Volley目前不支持流式传输。我能不能使用无止境的加载适配器来限制一次加载的json条目的数量?当然,如果您可以控制json的大小,并使其适合内存,因为这对您来说可能是一个较小的更改。但也要记住,如果JSON在将来变得更大,那么您将回到同样的问题;使用截击,然后使用“jackson”解析JSON,这是一个好的解决方法吗?
public void parseInfo(String genderTxt2, Boolean gender){
final String URL = "url" +
"?adult=" + isAdult.toString() + "&gender=" + genderTxt2;
info_text.setVisibility(View.GONE);
listview_progress.setVisibility(View.VISIBLE);
mRequestQueue.add(new JsonObjectRequest(Request.Method.GET,URL,null,new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
if (!fPullToRefreshAttacher.isRefreshing()) {
names.clear();
}
VolleyLog.v("Response:%n %s", response.toString(4));
adapter.clear();
parseJSON(response);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// VolleyLog.e("Error: ", error.getMessage().toString());
Toast.makeText(acc, "Unable to load names list! Please check connection", Toast.LENGTH_LONG).show();
}
}));
mRequestQueue.start();
}