在onSuccess()之前调用的loopj android-async-http onFinish()

时间:2014-03-15 16:39:54

标签: android http asynchronous loopj android-async-http

我使用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();
    }
}

1 个答案:

答案 0 :(得分:0)

我有一些类似的问题,因为我正在解析JSON,显然它需要比你想象的更多的时间。将该部分代码移动到另一个异步任务中,它就像一个魅力。 希望它对你有帮助,它对我有用。