1

这是代码:

 public void onRefresh() {
    MyDDPState.getInstance().getItems(null, new DDPListener() {
        @Override
        public void onResult(Map<String, Object> json) {

            Log.d(TAG, "refreshed");
            if (json.get("result") == null) {
/*
 * Result is null action
 */
                Log.d(TAG, "Null");
                swipeLayout.setRefreshing(false);
                return;
            }
            List<Map<String, Object>> temp = (ArrayList) json.get("result");
            Log.d(TAG, temp.toString());
            MyDDPState.getInstance().initItems(temp);

            Log.d(TAG, "converted" + MyDDPState.getInstance().getItems().toString());

            Log.d(TAG, swipeLayout.toString());
            Log.d(TAG, "Finished refreshing");

            swipeLayout.setRefreshing(false);

            Log.d(TAG, "Refresh closed");
        }
    });

}

swipeLayout 是指持有 SwipeRefreshLayout 的类中的私有变量。在回调中,我尝试调用 setrefreshing(false) 来摆脱进度指示器,但是这个调用会挂起异步函数。除了“刷新关闭”日志之外,所有其他日志都可以工作。

出于某种原因,我认为由于我正在使用的库,也没有记录 DDP 侦听器中的错误,所以我无法跟踪它。在 DDP 调用之外调用时,swipeLayout.setRefreshing 工作正常。

4

1 回答 1

0

无论如何,我设法解决了这个问题。

当我尝试更改 ui 变量时,该函数将停止运行。

原来问题是我在错误的线程上更改了 UI 变量。要修复它,您必须通过调用在 ui 线程内进行 UI 调用:

activity.runOnUiThread(new Runnable() {
    @Override
    public void run () {
        /* 
         * UI code
         */
    }
});

更多信息在这里:http: //developer.android.com/tools/testing/activity_testing.html

于 2014-11-13T19:41:24.537 回答