3

私は問題があります。を使用して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

トースト メッセージのコンテキストには何を使用していますか? それには、画面に何かを表示する方法が必要です。

于 2011-05-11T11:45:19.310 に答える
0

明らかに、あなたの FileObserver は別のスレッドを実行します(または実行します)。非 UI スレッドから UI を変更することはできません。Handler を FileObserver に渡し、そこからメッセージを送信します。Handlersについて読んでください。

于 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.
        }
    };

ファイルオブザーバーのスレッド呼び出しで、次のコードフラグメントを呼び出します。

mHandler.post(mUpdateResults);

Toast のコンテキストにはgetApplicationContext()代わりに tryを使用しないでください。YourClassPhysicalName.java

于 2011-05-11T12:02:09.637 に答える