日期:2014-05-16 浏览次数:20401 次
由于 AndroidAsyncHttp 1.4.4 的 JsonHttpResponseHandler 存在死循环的 BUG,1.4.5 版本发布不知道要何时,所以只能临时替换该类来修复这个错误。
Android开源库loopj的android-async-http的 JsonHttpResponseHandler 存在死循环GC_CONCURRENT
package com.ai9475.extend; import com.ai9475.meitian.AppManager; import com.ai9475.meitian.R; import com.loopj.android.http.JsonHttpResponseHandler; import android.app.AlertDialog; import android.content.DialogInterface; import android.util.Log; import org.apache.http.Header; import org.apache.http.HttpStatus; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.json.JSONTokener; import java.io.UnsupportedEncodingException; /** * 复写 AndroidAsyncHttp 1.4.4 开源库的 JsonHttpResponseHandler 类 * 当 1.4.5 released 后失效 * * Created by ZHOUZ on 2014/3/22. */ public class ZJsonHttpResponseHandler extends JsonHttpResponseHandler { private static final String LOG_TAG = "JsonHttpResponseHandler"; /** * Returns when request succeeds * * @param statusCode http response status line * @param headers response headers if any * @param response parsed response if any */ public void onSuccess(int statusCode, Header[] headers, JSONObject response) { } /** * Returns when request succeeds * * @param statusCode http response status line * @param headers response headers if any * @param response parsed response if any */ public void onSuccess(int statusCode, Header[] headers, JSONArray response) { } /** * Returns when request failed * * @param statusCode http response status line * @param headers response headers if any * @param throwable throwable describing the way request failed * @param errorResponse parsed response if any */ public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) { } /** * Returns when request failed * * @param statusCode http response status line * @param headers response headers if any * @param throwable throwable describing the way request failed * @param errorResponse parsed response if any */ public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONArray errorResponse) { } @Override public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { final AlertDialog.Builder dialog = new AlertDialog.Builder(AppManager.ActivityManager.current()); dialog.setIcon(android.R.drawable.ic_dialog_info); dialog.setTitle(R.string.app_error); dialog.setMessage(responseString); dialog.setNegativeButton(R.string.sure, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); dialog.show(); } @Override public void onSuccess(int statusCode, Header[] headers, String responseString) { } @Override public final void onSuccess(final int statusCode, final Header[] headers, final byte[] responseBytes) { if (statusCode != HttpStatus.SC_NO_CONTENT) { new Thread(new Runnable() { @Override public void run() { try { final Object jsonResponse = parseResponse(responseBytes); postRunnable(new Runnable() { @Override public void run() { if (jsonResponse instanceof JSONObject) { onSuccess(st