5

我收到此错误,我的应用程序崩溃:

java.lang.IllegalStateException: 当前线程必须有looper!

我对如何在 Google 上使用 looper 了解不多,我正在使用线程(主要用于睡眠功能)、处理程序(用于在 Async 任务运行时下载图像)和 Async 任务(用于从 URL 获取 JSON 数据) . 我不知道如何解决这个问题,所以任何建议都会很有帮助。

这是单击按钮时执行的线程的代码:

View view = flingContainer.getSelectedView();
          view.findViewById(R.id.item_swipe_right_indicator).setAlpha((float) 1.0);

        Thread timer = new Thread() {
            public void run() {
                try {
                    sleep(320);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    flingContainer.getTopCardListener().selectLeft();
                }
            }
        };
        timer.start();

我正在使用这个库,log-cat 是: 图片

其中:at com.enormous.quotesgram.MainActivity$3.run(MainActivity.java:479)in last in log-cat 对应于行:flingContainer.getTopCardListener().selectLeft();在上面的代码中。

4

1 回答 1

1

尝试以下(不幸的是我无法测试代码):

Thread timer = new Thread() {
    public void run() {
        try {
            sleep(320);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    flingContainer.getTopCardListener().selectLeft();
                }
            });
        }
    }
};

背后的想法是,Timer线程不是Looper线程(导致异常说"The current thread must have a looper")。然而,UI 线程是一个Looper线程(例如,参见这个站点)。

可能设计为flingContainer.getTopCardListener().selectLeft()在 UI 线程上运行,如果它没有在流水线线程中调用,它会失败。

于 2015-04-16T17:43:49.167 回答