无法在未调用Looper.prepare()的线程内创建处理程序

无法在未调用Looper.prepare()的线程内创建处理程序

以下例外意味着什么; 我该怎么解决?

这是代码:

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)


MMMHUHU
浏览 1029回答 3
3回答

狐的传说

你是从工作线程调用它。您需要Toast.makeText()从主线程中调用(以及处理UI的大多数其他函数)。例如,您可以使用处理程序。查找与文档中的UI线程进行通信。简而言之://&nbsp;Set&nbsp;this&nbsp;up&nbsp;in&nbsp;the&nbsp;UI&nbsp;thread.mHandler&nbsp;=&nbsp;new&nbsp;Handler(Looper.getMainLooper())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;handleMessage(Message&nbsp;message)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;This&nbsp;is&nbsp;where&nbsp;you&nbsp;do&nbsp;your&nbsp;work&nbsp;in&nbsp;the&nbsp;UI&nbsp;thread. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Your&nbsp;worker&nbsp;tells&nbsp;you&nbsp;in&nbsp;the&nbsp;message&nbsp;what&nbsp;to&nbsp;do. &nbsp;&nbsp;&nbsp;&nbsp;}};void&nbsp;workerThread()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;And&nbsp;this&nbsp;is&nbsp;how&nbsp;you&nbsp;call&nbsp;it&nbsp;from&nbsp;the&nbsp;worker&nbsp;thread: &nbsp;&nbsp;&nbsp;&nbsp;Message&nbsp;message&nbsp;=&nbsp;mHandler.obtainMessage(command,&nbsp;parameter); &nbsp;&nbsp;&nbsp;&nbsp;message.sendToTarget();}其他选择:您可以使用AsyncTask,它适用于在后台运行的大多数事情。它有一些钩子,您可以调用它来指示进度,以及何时完成。您还可以使用Activity.runOnUiThread()。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android
Java