0

我使用 Ion 来处理我的请求,然后我使用它的onCompleted回调处理响应。

我的问题是应用程序在完成此回调中应做的事情之前完全冻结。没有崩溃,没有错误,什么都没有。它只是冻结。

调试时,它永远不会在冻结后运行下一行代码。我尝试删除我的handleResponse方法中的所有代码,但它仍然在另一个点冻结。

以下是我的代码的相关部分(虽然不是确切的代码):

private void performSync() {
    Ion.with(mContext.get())
       .load(API_URL)
       .setHeader("Content-Type", "application/json")
       .setStringBody(json)
       .asString()
       .setCallback(new FutureCallback<String>() {
           @Override
           public void onCompleted(Exception e, String result) {
                 // Some code to map response.
                 ...

                 // Freezes inside this method.
                 handleResponse(myResponse);

                 // Freezes here if I remove the above code.
                 myService.sendBroadcast(MY_ACTION);
           }
       });
}

private void handleResponse(Object myResponse) {
    // Do something with my response (extract a list from it).
    ...

    // Process data.
    for (Object object : listFromResponse) {
       // Do stuff with the objects. Works fine until the very last object.
    }

    // Freezes before this line. It never gets here.
    PreferenceUtils.saveStringPreference(MY_PREFERENCE, someValue);
}

很抱歉代码不准确,我不能发布真实的东西。但是实际的代码遵循上面相同的结构,它应该给你们一个想法。

我很难弄清楚这个问题。它看起来像一个线程问题,但由于 Ion 异步工作,它不应该冻结应用程序。

4

1 回答 1

1

该应用程序在您的代码(回调)中冻结,而不是 Ion。我不知道你在做什么,但是逐步进入调试器中的方法并找出到底是什么挂起。

尝试注释代码,直到它停止冻结。这可能是找到违规行的最简单方法。

于 2014-11-14T00:22:47.923 回答