【问题标题】:Android: setRefreshing(false) on DDP callback hangs appAndroid:DDP回调上的setRefreshing(false)挂起应用程序
【发布时间】:2015-01-10 22:47:57
【问题描述】:

代码如下:

 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 工作正常。

【问题讨论】:

  • 挂起是什么意思?
  • 异步调用类型只是停止运行或退出。
  • 应用程序崩溃了吗?
  • 它不会崩溃,异步调用只是停止
  • 我刚刚尝试在 getItems 调用的外部添加一个 setRefreshing(false) 调用,当我这样做时,回调传递到 Refresh closed

标签: android meteor refresh swiperefreshlayout ddp


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多