我最近在我的凌空實現中遇到了一個bug,我沒有使用任何圖像加載抽象概念,我使用它來調用更多10 REST API調用view-pager FragmentStatePagerAdapter
一個http restapi調用每一個滑動,一切正常,但應用程序崩潰了幾次,如果我運行應用程序1000次,它只會崩潰5次。如何實施JSON流式概念以避免OutOfMemory錯誤?
錯誤日誌:
FATAL EXCEPTION:
java.lang.OutOfMemoryError
E/AndroidRuntime(5798): at com.android.volley.toolbox.DiskBasedCache.streamToBytes(DiskBasedCache.java:316)
E/AndroidRuntime(5798): at com.android.volley.toolbox.DiskBasedCache.readString(DiskBasedCache.java:526)
E/AndroidRuntime(5798): at com.android.volley.toolbox.DiskBasedCache.readStringStringMap(DiskBasedCache.java:549)
E/AndroidRuntime(5798): at com.android.volley.toolbox.DiskBasedCache$CacheHeader.readHeader(DiskBasedCache.java:392)
E/AndroidRuntime(5798): at com.android.volley.toolbox.DiskBasedCache.initialize(DiskBasedCache.java:155)
E/AndroidRuntime(5798): at com.android.volley.CacheDispatcher.run(CacheDispatcher.java:85)
通過谷歌搜索,我發現,我們必須使用這JSON流概念
詳細的解決方案:
大多數應用程序應該使用只有對象模型API。 JSON流式傳輸 在以下幾種情況下非常有用:無法將整個對象模型加載到內存中時,不可能或不希望使用 。這是與內存有限的移動平臺相關的大多數 。當它是 必需讀取或寫入文檔之前,它是完全可用的 。
我在找什麼?:
我試圖找到我的截擊內存不足與JSON流媒體解決方案,我在想怎麼能轉換我的排球Helper類使用JSON流。
這裏是我的排球輔助類:
public class GsonRequest<T> extends Request<T> {
private final Gson gson = new Gson();
private final Class<T> clazz;
private final Map<String, String> headers;
private final Listener<T> listener;
/**
* Make a GET request and return a parsed object from JSON.
*
* @param url URL of the request to make
* @param clazz Relevant class object, for Gson's reflection
* @param headers Map of request headers
*/
public GsonRequest(String url, Class<T> clazz, Map<String, String> headers,
Listener<T> listener, ErrorListener errorListener) {
super(Method.GET, url, errorListener);
this.clazz = clazz;
this.headers = headers;
this.listener = listener;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return headers != null ? headers : super.getHeaders();
}
@Override
protected void deliverResponse(T response) {
listener.onResponse(response);
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
try {
String json = new String(
response.data, HttpHeaderParser.parseCharset(response.headers));
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));
}
}
}
任何一個可以指導我上面的類使用JSON流的概念,以避免整個對象模型加載到內存中凌空轉換?
謝謝你的時間。
你解決了嗎?怎麼樣 ?我也需要使用這種方法。 – maxxxo
@maxxxo嘗試使用Volley Singleton模式!重用請求隊列對象!可能是我沒用過那個Singleton模式!現在適用於最新的Okhttp! FYI是你想使用像Retrofit Dot模式使用Volley自定義庫稱爲https://github.com/orhanobut/wasp –