1

我正在使用 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按照这个论点,onFinish() 不能在 onFailure() 或 onSuccess() 之前调用。我倾向于同意。

尽管如此,对我来说,订单发生了变化,对我来说,这个变化伴随着从 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();
    }
}
4

1 回答 1

0

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

于 2014-03-26T12:42:24.783 回答