2011-05-11 92 views
3

我遇到问题了。我正在使用一个FileObserver,它将新文件从观看目录移动到另一个先前指定的目录。在我的想法中,只要观察者观察目录,并且如果应用程序仅在背景中,则应该显示说明'文件xy已被移动'的Toast消息。但我没有得到它的工作。 它总是告诉我,有一个RuntimeException,并且不能拨打电话Looper.prepare()FileObserver的Toast

05-11 13:21:28.484: WARN/System.err的(3397): 了java.lang.RuntimeException:无法 内螺纹已 不叫Looper.prepare创建处理器()

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

有其他人的想法吗? 在此先感谢。

最好的问候,托比

回答

0

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

+0

谢谢,这有帮助!我只是理解错误的处理器概念。现在它正在工作。非常感谢您的帮助。 – 2011-05-11 13:01:55

+1

如果问题或答案可以更新以提供示例代码,那将是非常好的。我正在处理同样的问题,但没有看到如何正确使用Handler。谢谢! – shanabus 2011-09-02 18:40:04

0

你在使用的吐司消息的情况下?这将不得不在屏幕上显示某些东西。

+0

我正在使用应用程序上下文。我从主要活动给观察员。 – 2011-05-11 11:53:07

+0

查看有关处理程序的两个帖子。 – 2011-05-11 12:04:16

-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为吐司的背景。

1

之前你的面包语句添加以下内容:

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

这将使它在UI线程上运行。 希望这有助于。