我使用loopj android-async-http运行Android 4.2.2。我最近从android-async-http-1.4.3.jar升级到android-async-http-1.4.4.jar。当我升级时,我注意到我的应用程序发生了变化,我追溯到onFailure(),onSuccess()和onFinish()的回调顺序。现在onFinish()分别在onFailure()或onSuccess()之前系统地调用失败或成功。
我查看了loopj错误#411并进入https://github.com/loopj/android-async-http/blob/master/library/src/main/java/com/loopj/android/http/AsyncHttpRequest.java#L51以跟随参数,在onFailure()或onSuccess()之前无法调用onFinish()。我倾向于同意。
尽管如此,对我而言,订单已经改变,对我而言,这一变化伴随着从1.4.3升级到1.4.4。
似乎问题#411已解决。只是,我不明白怎么做。谁能帮助我理解我可能做错了什么?
下面的代码片段演示了我看到的顺序如下
ASYNC-TEST,onStart ASYNC-TEST,onFinish ASYNC-TEST,onFailure
或
ASYNC-TEST,onStart ASYNC-TEST,onFinish ASYNC-TEST,onSuccess
public static void testAsync() {
JSONObject body = new JSONObject();
try {
body.put("phone", "18037771234");
body.put("password", "secret");
} catch (JSONException e) {
e.printStackTrace();
}
try {
new AsyncHttpClient().post(context, "http://myapp.nodejitsu.com/sessions", new StringEntity(body.toString()), "application/json", new JsonHttpResponseHandler() {
@Override
public void onStart() {
Log.d("ASYNC-TEST", "onStart");
}
@Override
public void onSuccess(JSONObject response) {
Log.d("ASYNC-TEST", "onSuccess");
}
@Override
public void onFailure(Throwable t, JSONObject response) {
Log.d("ASYNC-TEST", "onFailure");
}
@Override
public void onFinish() {
Log.d("ASYNC-TEST", "onFinish");
}
});
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
我有一些类似的问题,因为我正在解析JSON,显然它需要比你想象的更多的时间。将该部分代码移动到另一个异步任务中,它就像一个魅力。 希望它对你有帮助,它对我有用。