我試圖在我的應用程序的後臺運行聯網進程以發送電子郵件。由於這是一項網絡任務,因此必須在後臺的單獨線程中運行。但是,我無法讓線程正確執行。要開始一個新的線程,我只是創建一個,並使用Thread.start()運行它,無法在執行網絡程序時未調用Looper.prepare()的線程內創建處理程序
new Thread(){
public void run(){
Mail mail = new Mail();
mail.setFrom("[email protected]");
mail.setTo("[email protected]");
mail.setSubject("Hello");
mail.setMessage("World");
try
{
if (mail.send())
{
Toast.makeText(getActivity(),
"Email Sent Successfully", Toast.LENGTH_LONG)
.show();
}
else
Toast.makeText(getActivity(),
"Email Not Sent", Toast.LENGTH_LONG).show();
}
catch (Exception e)
{
Log.i("Debug","Could not send email - " + e);
Log.i("Debug",e.getStackTrace().toString());
}
}
}.start();
不過,我總是得到錯誤 不能內螺紋創建處理程序尚未調用Looper.prepare ()
我嘗試了一些其他的事情,試圖通過Looper.getMainLooper()
線程,通過處理程序與Runnable,但它給了我同樣的錯誤。我也嘗試過使用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)
請張貼您的堆棧跟蹤。 – CommonsWare
現在在我的問題。 – iamseiko
您應該提供**完整**堆棧跟蹤。 – nKn