以下是代码:
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工作正常。
答案 0 :(得分:0)
无论如何,我设法解决了这个问题。
当我尝试更改ui变量时,该函数将停止运行。
原来问题是我在错误的线程上更改了UI变量。要修复它,您必须通过调用:
在ui线程内进行UI调用activity.runOnUiThread(new Runnable() {
@Override
public void run () {
/*
* UI code
*/
}
});
此处有更多信息:http://developer.android.com/tools/testing/activity_testing.html