【Android開発】Can’t toast on a thread that has not called looper.prepare()エラーの解決策

表題のエラーの解決策です。

原因としては、本来Toastはメインスレッドでのみ実行できる仕様ですが、サブスレッドで実行してしまっていることです。

解決策はHandlerを使ってメインスレッドで実行するように変更すればOKです。
以下、具体例です。

修正前

1
2
3
4
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(() -> {
Toast.makeText(getContext(), "エラーメッセージ", Toast.LENGTH_LONG).show()
});

修正前

1
2
3
4
5
6
7
final Handler handler = new Handler();
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(() -> {
handler.post(() -> {
Toast.makeText(getContext(), "エラーメッセージ", Toast.LENGTH_LONG).show()
});
});

handler.postの処理はnew Handler()したスレッドで実行されるのでnew Handler()はメインスレッドで実行する必要があります!

Android開発は非同期処理が鬼門ですよね、、

おわり

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×