Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Can';t在执行网络进程时,在未调用Looper.prepare()的线程内创建处理程序_Android_Multithreading_Networking_Jakarta Mail - Fatal编程技术网

Android Can';t在执行网络进程时,在未调用Looper.prepare()的线程内创建处理程序

Android Can';t在执行网络进程时,在未调用Looper.prepare()的线程内创建处理程序,android,multithreading,networking,jakarta-mail,Android,Multithreading,Networking,Jakarta Mail,我正在尝试在我的应用程序的后台运行一个网络进程,以发送电子邮件。由于这是一项网络任务,因此必须在后台的单独线程上运行。但是,我无法使线程正确执行。要启动一个新线程,我只需创建一个线程,然后使用thread.start()运行它 然而,我总是得到错误 无法在未调用Looper.prepare()的线程内创建处理程序 我尝试了其他一些方法,试图通过带有Runnable的处理程序将Looper.getMainLooper()传递给线程,但它给出了相同的错误。我也尝试过使用AsyncTask,但似乎因为

我正在尝试在我的应用程序的后台运行一个网络进程,以发送电子邮件。由于这是一项网络任务,因此必须在后台的单独线程上运行。但是,我无法使线程正确执行。要启动一个新线程,我只需创建一个线程,然后使用thread.start()运行它

然而,我总是得到错误 无法在未调用Looper.prepare()的线程内创建处理程序

我尝试了其他一些方法,试图通过带有Runnable的处理程序将
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)