Android Can';t在执行网络进程时,在未调用Looper.prepare()的线程内创建处理程序
我正在尝试在我的应用程序的后台运行一个网络进程,以发送电子邮件。由于这是一项网络任务,因此必须在后台的单独线程上运行。但是,我无法使线程正确执行。要启动一个新线程,我只需创建一个线程,然后使用thread.start()运行它 然而,我总是得到错误 无法在未调用Looper.prepare()的线程内创建处理程序 我尝试了其他一些方法,试图通过带有Runnable的处理程序将Android Can';t在执行网络进程时,在未调用Looper.prepare()的线程内创建处理程序,android,multithreading,networking,jakarta-mail,Android,Multithreading,Networking,Jakarta Mail,我正在尝试在我的应用程序的后台运行一个网络进程,以发送电子邮件。由于这是一项网络任务,因此必须在后台的单独线程上运行。但是,我无法使线程正确执行。要启动一个新线程,我只需创建一个线程,然后使用thread.start()运行它 然而,我总是得到错误 无法在未调用Looper.prepare()的线程内创建处理程序 我尝试了其他一些方法,试图通过带有Runnable的处理程序将Looper.getMainLooper()传递给线程,但它给出了相同的错误。我也尝试过使用AsyncTask,但似乎因为
Looper.getMainLooper()
传递给线程,但它给出了相同的错误。我也尝试过使用AsyncTask,但似乎因为这不是一个UI操作,所以使用AsyncTask是不正确的(另外,它也给了我同样的错误)
这是我的追踪
03-01 16:14:43.305: I/GreenBook(4454): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
03-01 16:14:43.305: I/GreenBook(4454): at android.os.Handler.<init>(Handler.java:121)
03-01 16:14:43.305: I/GreenBook(4454): at android.widget.Toast$TN.<init>(Toast.java:361)
03-01 16:14:43.305: I/GreenBook(4454): at android.widget.Toast.<init>(Toast.java:97)
03-01 16:14:43.305: I/GreenBook(4454): at android.widget.Toast.makeText(Toast.java:254)
03-01 16:14:43.305: I/GreenBook(4454): at com.stacksmashers.greenbook.RegisterActivity$10.run(RegisterActivity.java:688)
03-01 16:14:43.305:I/GreenBook(4454):java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序
03-01 16:14:43.305:I/GreenBook(4454):位于android.os.Handler.(Handler.java:121)
03-01 16:14:43.305:I/GreenBook(4454):在android.widget.Toast$TN.(Toast.java:361)
03-01 16:14:43.305:I/GreenBook(4454):在android.widget.Toast.(Toast.java:97)
03-01 16:14:43.305:I/GreenBook(4454):位于android.widget.Toast.makeText(Toast.java:254)
03-01 16:14:43.305:I/GreenBook(4454):位于com.stacksmasher.GreenBook.RegisterActivity$10.run(RegisterActivity.java:688)
无法在未调用Looper.prepare()的线程内创建处理程序
这是因为您正试图显示一个土司
我也尝试过使用AsyncTask,但似乎因为这不是一个UI操作,所以使用AsyncTask是不正确的
大多数开发人员都认为Toast
是UI的一部分
另外,它也给了我同样的错误
也许您正试图从doInBackground()
中显示Toast
。在onPostExecute()
(或onProgressUpdate()
,如果您选择调用publishProgress()
)中显示您的Toast
。请发布堆栈跟踪。这是我的问题。您应该提供完整的堆栈跟踪。这是完整的堆栈跟踪。只有线程捕获到异常,因此它没有使整个应用程序崩溃,因此即使线程崩溃,应用程序仍保持运行。RegisterActivity.java文件的第688行是什么?谢谢!这就解决了问题!我没有意识到我在我的方法中使用的是UI。作为异步任务的一部分,我刚刚在OnProgressUpdate方法中调用了Toast。检查这个库编译'com.shamanland:xdroid toaster:0.0.5'
,它不需要runOnUiThread()
或上下文
变量,所有例程都不存在了!只需调用Toaster.toast(R.string.my_msg)代码>以下是示例:
03-01 16:14:43.305: I/GreenBook(4454): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
03-01 16:14:43.305: I/GreenBook(4454): at android.os.Handler.<init>(Handler.java:121)
03-01 16:14:43.305: I/GreenBook(4454): at android.widget.Toast$TN.<init>(Toast.java:361)
03-01 16:14:43.305: I/GreenBook(4454): at android.widget.Toast.<init>(Toast.java:97)
03-01 16:14:43.305: I/GreenBook(4454): at android.widget.Toast.makeText(Toast.java:254)
03-01 16:14:43.305: I/GreenBook(4454): at com.stacksmashers.greenbook.RegisterActivity$10.run(RegisterActivity.java:688)