3

我有个问题。我正在使用 a FileObserver,它将新文件从监视目录移动到另一个以前指定的目录。在我看来,只要观察者监视目录,即使应用程序仅在后台,也应该显示一条吐司消息,上面写着“文件 xy 已被移动”。但我没有让它工作。它总是告诉我,有一个RuntimeException, 并且如果不调用它就无法完成Looper.prepare()

05-11 13:21:28.484: WARN/System.err(3397): java.lang.RuntimeException: 无法在未调用 Looper.prepare() 的线程内创建处理程序

我也尝试过使用处理程序的方式,但我也没有让它工作。

别人有想法吗?提前致谢。

最好的问候,托比

4

4 回答 4

1

在您的 Toast 语句之前添加以下内容:

runOnUiThread(new Runnable() {
            public void run()
            {
                Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
            }
        });

这将使它在 UI 线程上运行。希望这可以帮助。

于 2014-01-10T19:28:02.500 回答
0

您在 Toast 消息的上下文中使用什么?那将必须有一种方法可以在屏幕上显示某些内容。

于 2011-05-11T11:45:19.310 回答
0

显然,您的 FileObserver 运行(或是)另一个线程。您不能从非 UI 线程修改 UI。将处理程序传递给您的 FileObserver 并从中发送消息。阅读处理程序

于 2011-05-11T11:56:11.347 回答
-1

将以下代码放入您的课程中:

// Need handler for callbacks to UI Threads
    // For background operations
    final Handler mHandler = new Handler();

    // Create Runnable for posting results
    final Runnable mUpdateResults = new Runnable() {
        public void run() {
            // Show the toast here.
        }
    };

并在您的 fileobserver 的线程调用中放置以下代码片段:

mHandler.post(mUpdateResults);

并且不要在 Toast 的上下文中使用getApplicationContext()替代 try YourClassPhysicalName.java

于 2011-05-11T12:02:09.637 回答