我有问题。我正在使用FileObserver
,它将新文件从监视目录移动到另一个指定目录。在我的想法中,只要观察者观察目录,如果应用程序仅在后台,就应该显示一个“文件xy已被移动”的Toast消息。但我没有让它发挥作用。
它总是告诉我,有一个RuntimeException
,如果不调用Looper.prepare()
就无法完成。
05-11 13:21:28.484: WARN / System.err的(3397): java.lang.RuntimeException:不能 在具有的线程内创建处理程序 没有叫做Looper.prepare()
我也试过使用处理程序,但我也没有让它工作。
还有其他人有想法吗? 提前谢谢。
最好的问候,托比
答案 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的上下文。