[解決済み] Looper.prepare()を呼び出していないスレッドではハンドラを作成できない
2022-01-31 22:42:27
質問
次の例外はどういう意味ですか?
これがそのコードです。
Toast toast = Toast.makeText(mContext, "Something", Toast.LENGTH_SHORT);
これは例外です。
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:121)
at android.widget.Toast.<init>(Toast.java:68)
at android.widget.Toast.makeText(Toast.java:231)
解決方法は?
ワーカスレッドから呼び出している。を呼び出す必要があります。
Toast.makeText()
(そしてUIを扱う他のほとんどの関数も) メインスレッド内から行います。例えば、ハンドラを使うことができます。
調べる UIスレッドとの通信 のドキュメントを参照してください。簡単に説明すると
// Set this up in the UI thread.
mHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message message) {
// This is where you do your work in the UI thread.
// Your worker tells you in the message what to do.
}
};
void workerThread() {
// And this is how you call it from the worker thread:
Message message = mHandler.obtainMessage(command, parameter);
message.sendToTarget();
}
その他のオプション
を使うことができます。
Activity.runOnUiThread()
. を使えば簡単です。
Activity
:
@WorkerThread
void workerThread() {
myActivity.runOnUiThread(() -> {
// This is where your UI code goes.
}
}
また、メインのルーパーに投稿することもできます。これは
Context
.
@WorkerThread
void workerThread() {
ContextCompat.getMainExecutor(context).execute(() -> {
// This is where your UI code goes.
}
}
非推奨。
を使用することができます。 AsyncTask これは、バックグラウンドで実行されるほとんどのものに対してうまく機能します。このフックには、進行状況や完了を示すために呼び出すことができるものがあります。
便利ですが、正しく使用しないとコンテキストをリークする可能性があります。公式に非推奨とされているので、もう使わない方がいい。
関連
-
[解決済み】Android TextView : "setTextで表示されたテキストを連結しない" について
-
[解決済み】Android ADB デバイスがオフラインで、コマンドを発行できない。
-
[解決済み】Android Studioでマニフェストのマージに失敗し、複数のエラーが発生した。
-
[解決済み】Build Tools リビジョン 23.0.1 の検索に失敗しました。
-
[解決済み】Android Studioで最新バージョンのgradleを使用する方法
-
[解決済み] sendUserActionEvent() は null です。
-
[解決済み] Mockito lenient() を使用する場合
-
[解決済み] SDKの場所がandroid studioで見つからない
-
[解決済み] Androidでイメージビューの背景を透明に設定する
-
[解決済み] setBackgroundDrawable() 非推奨
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】このアクティビティでは、Theme.AppCompatテーマ(またはその子孫)を使用する必要があります。
-
[解決済み】AndroidのSSL接続でトラストアンカーが見つからない
-
[解決済み】com.android.ide.common.process.ProcessException: aaptの実行に失敗しました! どうすればいいですか?
-
[解決済み] [Solved] Unsupported method: ベースコンフィグ.getApplicationIdSuffix()
-
[解決済み】"ビットマップが大きすぎてテクスチャにアップロードできない"
-
[解決済み】フラグメントMyFragmentがアクティビティにアタッチされない。
-
[解決済み] エラー - Android リソースのリンクに失敗しました (AAPT2 27.0.3 Daemon #0)
-
[解決済み] Looper.prepare()を呼び出していないスレッドではハンドラを作成できない
-
[解決済み] AndroidのADBデバイスが不正に
-
[解決済み] BIOSのセキュリティ設定でVT-xを有効にする(お使いのコンピュータのドキュメントを参照)。