在onSuccess()之前调用onFinish()



我使用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 error #411和https://github.com/loopj/android-async-http/blob/master/library/src/main/java/com/loopj/android/http/AsyncHttpRequest.java#L51以跟踪参数,即onFinish()不能在onFailure()或onSuccess()之前调用。我比较同意。

尽管如此,对我来说,顺序改变了,对我来说,这个变化是随着1.4.3到1.4.4的升级而来的。

似乎问题错误#411已解决。只是,我不明白怎么回事。谁能帮我理解一下我可能做错了什么吗?

下面的代码片段演示了我看到的顺序,如下所示

ASYNC-TEST onStartASYNC-TEST, onFinishASYNC-TEST, onFailure

ASYNC-TEST onStartASYNC-TEST, onFinishASYNC-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();
    }
}

我有一些类似的问题,因为我正在解析JSON,显然它花费的时间比您想象的要多。将这部分代码移到另一个异步任务中,效果非常好。

我知道说这些答案有点愚蠢,但我在上面停留了一个小时,唯一的方法就是卸载应用程序并重新安装它!

最新更新