来自FileObserver的Toast

时间:2011-05-11 11:27:03

标签: android toast

我有问题。我正在使用FileObserver,它将新文件从监视目录移动到另一个指定目录。在我的想法中,只要观察者观察目录,如果应用程序仅在后台,就应该显示一个“文件xy已被移动”的Toast消息。但我没有让它发挥作用。 它总是告诉我,有一个RuntimeException,如果不调用Looper.prepare()就无法完成。

  

05-11 13:21:28.484:   WARN / System.err的(3397):   java.lang.RuntimeException:不能   在具有的线程内创建处理程序   没有叫做Looper.prepare()

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

还有其他人有想法吗? 提前谢谢。

最好的问候,托比

4 个答案:

答案 0 :(得分:1)

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

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

这将使其在UI线程上运行。 希望这会有所帮助。

答案 1 :(得分:0)

你在Toast消息的上下文中使用了什么?这将需要一种在屏幕上显示内容的方法。

答案 2 :(得分:0)

显然,您的FileObserver运行(或是)另一个线程。您无法从非UI线程修改UI。将Handler传递给FileObserver并从中发送消息。阅读Handlers

答案 3 :(得分:-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);

并且不要使用getApplicationContext()代替尝试YourClassPhysicalName.java来获取Toast的上下文。