Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.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 为什么在调用Volley.RequestQuery.add()时出现OutOfMemory异常?_Android_Android Volley - Fatal编程技术网

Android 为什么在调用Volley.RequestQuery.add()时出现OutOfMemory异常?

Android 为什么在调用Volley.RequestQuery.add()时出现OutOfMemory异常?,android,android-volley,Android,Android Volley,当我删除requestQuery.add()行时,除了没有网络数据外,其他都可以正常工作。在添加requestQuery.add()之后-我得到以下结果: 回溯: 08-29 18:15:53.071 6305-7075/? E/dalvikvm-heap﹕ Out of memory on a 840969348-byte allocation. 08-29 18:15:53.141 6305-7075/? E/AndroidRuntime﹕ FATAL EXCEPTION

当我删除requestQuery.add()行时,除了没有网络数据外,其他都可以正常工作。在添加requestQuery.add()之后-我得到以下结果:

回溯:

08-29 18:15:53.071    6305-7075/? E/dalvikvm-heap﹕ Out of memory on a 840969348-byte allocation.
    08-29 18:15:53.141    6305-7075/? E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-27227
        java.lang.OutOfMemoryError
                at com.android.volley.toolbox.DiskBasedCache.streamToBytes(DiskBasedCache.java:322)
                at com.android.volley.toolbox.DiskBasedCache.readString(DiskBasedCache.java:540)
                at com.android.volley.toolbox.DiskBasedCache.readStringStringMap(DiskBasedCache.java:562)
                at com.android.volley.toolbox.DiskBasedCache$CacheHeader.readHeader(DiskBasedCache.java:403)
                at com.android.volley.toolbox.DiskBasedCache.initialize(DiskBasedCache.java:156)
                at com.android.volley.CacheDispatcher.run(CacheDispatcher.java:84)
以下是我的代码:

public class DataReceiver {
    public static void initializeCountriesListUpdate(String urlString, final Context context) throws IOException {
        RequestQueue requestQueue = Volley.newRequestQueue(context);
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, urlString,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            ArrayList<Country> countriesList = JsonParser.getCountriesFromJson(response, context);

                            ((CountriesListActivity)context).updateCountriesList(countriesList);
                            ((CountriesListActivity)context).progressDialog.hide();
                            ((CountriesListActivity)context).progressDialog.dismiss();
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("NetworkManager", "Cannot resolve data from the server");
            }
        });
        VolleySingleton.getInstance().getRequestQueue().add(jsonObjectRequest);
    }

位图通常会导致outofmemory错误。 尝试忽略位图加载,以测试这是否是问题所在。
检查那里的大小,可能使用此处描述的calculateInSampleSize

我怀疑您的主要问题是内存异常,并且作为一个副作用,您在获得OutOfMemoryError异常(这是“泄露了最初添加到此处的window com.android.internal.policy.impl.PhoneWindow$DecorView{41dbc578 V.E.…R…D 0,0-684192}”部分)

正如主要的例外情况所表明的,您的缓存可能比堆大,并且来自服务器的响应非常大,您应该集中精力解决这个问题


我认为这可能有助于您解决此问题。

您分析了堆转储吗?我的问题是缺少缓存。感谢Udi提供的链接提示。本手册帮助我更正了。我的singleton:
    android:hardwareAccelerated="false"
    android:largeHeap="true"