日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android开源库loopj的android-async-http的 JsonHttpResponseHandler 存在死循环GC_CONCURRENT

發布時間:2023/12/10 Android 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android开源库loopj的android-async-http的 JsonHttpResponseHandler 存在死循环GC_CONCURRENT 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我現在用的是 AndroidAsyncHttp 1.4.4 版本,之前遇到一個很奇怪的問題,

當使用?JsonHttpResponseHandler 解析請求的頁面出現服務器錯誤或其他情況返回的內容不是 JSON 字符串時不會調用自己復寫實現的 onSuccess 或者 onFailure 方法,將會出現不停打印 GC_CONCURRENT 出現死循環,自己完全沒法調試的問題。


后來在 論壇上發了一篇帖子但好多天都沒人回復?http://bbs.csdn.net/topics/390734079


經過多次檢查,排除了自己 JAVA 代碼出錯的可能,確定應該是這個庫內部代碼出現故障,不過遇到這種情況比較少,之前比較忙也懶得去計較了,但一直都放不下,今天POST數據時又遇到這個問題,真要崩潰了,連服務器返回的內容錯誤提示都看不到,完全沒法調試了,必須要仔細分析研究下了。


查看源碼,先查看在轉換 JSON 之前是否有執行過 onSuccess 或 onFailure , 打印 Log 日志后發現當服務器出現 notice 或者 error 等錯誤時,會重復調用重復調用 onSuccess(statusCode, headers, (String) jsonResponse); 方法,重復調用自己而出現死循環。


出現錯誤的代碼部分:

@Overridepublic void onSuccess(final int statusCode, final Header[] headers, final String responseBody) {if (statusCode != HttpStatus.SC_NO_CONTENT) {new Thread(new Runnable() {@Overridepublic void run() {try {final Object jsonResponse = parseResponse(responseBody);postRunnable(new Runnable() {@Overridepublic void run() {if (jsonResponse instanceof JSONObject) {onSuccess(statusCode, headers, (JSONObject) jsonResponse);} else if (jsonResponse instanceof JSONArray) {onSuccess(statusCode, headers, (JSONArray) jsonResponse);} else if (jsonResponse instanceof String) {onSuccess(statusCode, headers, (String) jsonResponse);} else {onFailure(new JSONException("Unexpected type " + jsonResponse.getClass().getName()), (JSONObject) null);}}});} catch (final JSONException ex) {postRunnable(new Runnable() {@Overridepublic void run() {onFailure(ex, (JSONObject) null);}});}}}).start();} else {onSuccess(statusCode, headers, new JSONObject());}}
JsonHttpResponseHandler 類中的?

public void onSuccess(final int statusCode, final Header[] headers, final String responseBody)

當出現 HTTP 500 錯誤時會重復執行


else if (jsonResponse instanceof String) {onSuccess(statusCode, headers, (String) jsonResponse); }



導致出現死循環,此處應該改成類似下面這樣處理

else if (jsonResponse instanceof String) {onFailure(statusCode, ...); }

因此這個 JsonHttpResponseHandler ?不能使用了,只能自己重新實現,o(︶︿︶)o 唉。。崩潰


后來想想先去 github 上反饋下,順便看看現在的源碼是否也是這樣的,結果發現官方居然剛剛更新了該部分代碼,修復了該問題,我只能說真是TMD太巧了吧,為什么不早點兒修復啊,浪費了我這么多生命值,這個庫應該是用的人比較多的了,比那個 okHttp 還要熱門的吧!




臥槽, 20小時前剛剛更新修復了該錯誤




既然如此 不多說了,先去看看有沒有最新的 jar 下載個再試試了,這個該死的問題終于要被解決了~~


2014/03/22 00:31 補充下:

官方現在還沒有釋出新版本,1.4.5 還沒正式發布,不過官方介紹已經加上了 maven 的使用方法,這樣可以一直保持最新版不用手動去檢查了

compile 'com.loopj.android:android-async-http:1.4.+'


試了半天不知道如何使用他的?1.4.5-SNAPSHOT 開發版本

但看到 1.4.4 已經是差不多半年前發布的了,1.4.5 不知何時才能正式發布,只有自己繼承下?JsonHttpResponseHandler 類自己簡單實現下算了,等不了





轉載于:https://www.cnblogs.com/zhouzme/p/5758444.html

總結

以上是生活随笔為你收集整理的Android开源库loopj的android-async-http的 JsonHttpResponseHandler 存在死循环GC_CONCURRENT的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。