Java android异步任务邮件发送错误
我对异步任务有问题。我想发送邮件,但当我使用AsyncTasker时,我会使用“ 带活页夹﹕ 从活页夹存根捕获到运行时异常 实施 java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序。“ 错误 对于发送邮件,我使用以下方法:Java android异步任务邮件发送错误,java,android,email,android-asynctask,jakarta-mail,Java,Android,Email,Android Asynctask,Jakarta Mail,我对异步任务有问题。我想发送邮件,但当我使用AsyncTasker时,我会使用“ 带活页夹﹕ 从活页夹存根捕获到运行时异常 实施 java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序。“ 错误 对于发送邮件,我使用以下方法: class MailSender extends AsyncTask<Void, Integer, Integer> { /* (non-Javadoc)
class MailSender extends AsyncTask<Void, Integer, Integer>
{
/* (non-Javadoc)
* @see android.os.AsyncTask#onPreExecute()
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
}
/* (non-Javadoc)
* @see android.os.AsyncTask#doInBackground(Params[])
*/
@Override
protected Integer doInBackground(Void... params) {
okuayar();
Mail m = new Mail(email, sifre);
String toAddresses = gmailler;
m.setToAddresses(toAddresses);
m.setFromAddress("zekikelce39@gmail.com");
m.setMailSubject("resim."+getFormattedDate(new Date()));
m.setMailBody("Yeni resim çekildi.Tarihinde: "+getFormattedDate(new Date()));
/*
try {
ZipUtility.zip(filename,"/mnt/sdcard/res.zip");
} catch (IOException e1) {
Log.e("MailApp", "Could not zip folder", e1);
}*/
try {
m.addAttachment(zipName);
// m.addAttachment(filename);
if (m.send()) {
Toast.makeText(MainActivity.this,"Message sent",Toast.LENGTH_LONG);
System.out.println("Message sent");
return 1;
} else {
Toast.makeText(MainActivity.this,"Mail Yollandı",Toast.LENGTH_LONG);
return 2;
}
} catch (Exception e) {
Log.e("MailApp", "Mail Yollandı", e);
return 3;
}
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
if(result==1)
Toast.makeText(MainActivity.this,
"Email was sent successfully.", Toast.LENGTH_LONG)
.show();
else if(result==2)
Toast.makeText(MainActivity.this,
"Email was not sent.", Toast.LENGTH_LONG).show();
else if(result==3)
Toast.makeText(MainActivity.this,
"There was a problem sending the email.",
Toast.LENGTH_LONG).show();
}
}
然后,为了将zip文件发送到邮件,我使用:
private void mailleriyolla(){
File file = new File(zipName);
if(file.exists())
{
new MailSender().execute();
}
拉链功能良好,没有问题。但当我将Send函数与asynctask一起使用时,我得到了一个错误。
还有logcat
12-26 21:02:38.638 26745-26763/net.dheera.wearcamera W/Binder﹕ Caught a RuntimeException from the binder stub implementation.
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:200)
at android.os.Handler.<init>(Handler.java:114)
at android.app.Dialog.<init>(Dialog.java:108)
at android.app.AlertDialog.<init>(AlertDialog.java:125)
at android.app.AlertDialog.<init>(AlertDialog.java:109)
at android.app.ProgressDialog.<init>(ProgressDialog.java:77)
at net.dheera.wearcamera.MainActivity$MailSender.onPreExecute(MainActivity.java:565)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
at android.os.AsyncTask.execute(AsyncTask.java:535)
at net.dheera.wearcamera.MainActivity.mailleriyolla(MainActivity.java:122)
at net.dheera.wearcamera.MainActivity.access$200(MainActivity.java:52)
at net.dheera.wearcamera.MainActivity$1.onMessageReceived(MainActivity.java:110)
at com.google.android.gms.wearable.internal.ax.a(Unknown Source)
at com.google.android.gms.wearable.internal.ae$a.onTransact(Unknown Source)
at android.os.Binder.execTransact(Binder.java:446)
12-26 21:02:38.638 26745-26763/net.dheera.wearcamera带活页夹﹕ 从活页夹存根实现捕获到运行时异常。
java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序
android.os.Handler.(Handler.java:200)
位于android.os.Handler.(Handler.java:114)
在android.app.Dialog.(Dialog.java:108)
在android.app.AlertDialog.(AlertDialog.java:125)
在android.app.AlertDialog.(AlertDialog.java:109)
在android.app.ProgressDialog.(ProgressDialog.java:77)
位于net.dheera.wearcamera.MainActivity$mailssender.onPreExecute(MainActivity.java:565)
位于android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
在android.os.AsyncTask.execute(AsyncTask.java:535)
位于net.dheera.wearcamera.MainActivity.mailleriyolla(MainActivity.java:122)
net.dheera.wearcamera.MainActivity.access$200(MainActivity.java:52)
net.dheera.wearcamera.MainActivity$1.onMessageReceived(MainActivity.java:110)
位于com.google.android.gms.wearable.internal.ax.a(未知来源)
位于com.google.android.gms.wearable.internal.ae$a.onTransact(未知来源)
位于android.os.Binder.execTransact(Binder.java:446)
我想你的问题在于:
try {
m.addAttachment(zipName);
// m.addAttachment(filename);
if (m.send()) {
Toast.makeText(MainActivity.this,"Message sent",Toast.LENGTH_LONG);
System.out.println("Message sent");
return 1;
} else {
Toast.makeText(MainActivity.this,"Mail Yollandı",Toast.LENGTH_LONG);
return 2;
}
} catch (Exception e) {
Log.e("MailApp", "Mail Yollandı", e);
return 3;
}
在这种情况下,您不能在
背景线程中使用Toast,即使您没有在那里显示它,但您正在实例化它。将Toast.makeText
移出doInBackground
这将清除问题 回答得好。简而言之,您不应该在doInBackground中执行任何UI。
try {
m.addAttachment(zipName);
// m.addAttachment(filename);
if (m.send()) {
Toast.makeText(MainActivity.this,"Message sent",Toast.LENGTH_LONG);
System.out.println("Message sent");
return 1;
} else {
Toast.makeText(MainActivity.this,"Mail Yollandı",Toast.LENGTH_LONG);
return 2;
}
} catch (Exception e) {
Log.e("MailApp", "Mail Yollandı", e);
return 3;
}