Java 从android应用程序发送电子邮件时出现NetworkOnMainThread异常
我最近在这里发现了一个问题,它帮助我建立了一个自动电子邮件客户端,应用程序将在没有任何用户干预的情况下发送电子邮件,以传递忘记的密码,但我遇到了NetworkOnMainThread异常问题。这是引发异常的方法:Java 从android应用程序发送电子邮件时出现NetworkOnMainThread异常,java,android,Java,Android,我最近在这里发现了一个问题,它帮助我建立了一个自动电子邮件客户端,应用程序将在没有任何用户干预的情况下发送电子邮件,以传递忘记的密码,但我遇到了NetworkOnMainThread异常问题。这是引发异常的方法: public boolean send() throws Exception { Properties props = _setProperties(); if(!_user.equals("") && !_pass.equals("") &&
public boolean send() throws Exception {
Properties props = _setProperties();
if(!_user.equals("") && !_pass.equals("") && _to.length > 0 && !_from.equals("") && !_subject.equals("") && !_body.equals("")) {
Session session = Session.getInstance(props, this);
Log.d("1", "");
MimeMessage msg = new MimeMessage(session);
Log.d("2", "");
msg.setFrom(new InternetAddress(_from));
Log.d("3", "");
InternetAddress[] addressTo = new InternetAddress[_to.length];
Log.d("4", "");
for (int i = 0; i < _to.length; i++) {
addressTo[i] = new InternetAddress(_to[i]);
Log.d("5", "");
}
msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);
Log.d("6", "");
msg.setSubject(_subject);
Log.d("7", "");
msg.setSentDate(new Date());
Log.d("8", "");
// setup message body
BodyPart messageBodyPart = new MimeBodyPart();
Log.d("9", "");
messageBodyPart.setText(_body);
Log.d("10", "");
_multipart.addBodyPart(messageBodyPart);
Log.d("11", "");
// Put parts in message
msg.setContent(_multipart);
Log.d("12", "");
// send email
Transport.send(msg);
Log.d("13", "");
return true;
} else {
return false;
}
}
public boolean send()引发异常{
Properties props=_setProperties();
如果(!\u user.equals(“”&)&!\u pass.equals(“”&)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&{
Session Session=Session.getInstance(props,this);
Log.d(“1”和“);
MimeMessage msg=新MimeMessage(会话);
Log.d(“2”和“);
msg.setFrom(新的Internet地址(_-from));
Log.d(“3”和“);
InternetAddress[]addressTo=新的InternetAddress[_to.length];
Log.d(“4”和“);
对于(int i=0;i<\u to.length;i++){
addressTo[i]=新的Internet地址(_to[i]);
对数d(“5”和“);
}
msg.setRecipients(mimessage.RecipientType.TO,addressTo);
对数d(“6”和“);
msg.setSubject(_subject);
Log.d(“7”和“);
msg.setSentDate(新日期());
Log.d(“8”和“);
//设置消息正文
BodyPart messageBodyPart=新的MimeBodyPart();
Log.d(“9”和“);
messageBodyPart.setText(_body);
对数d(“10”和“);
_multipart.addBodyPart(messageBodyPart);
Log.d(“11”和“);
//将部件放入消息中
msg.setContent(_多部分);
对数d(“12”和“);
//发送电子邮件
发送(msg);
对数d(“13”和“);
返回true;
}否则{
返回false;
}
}
问题似乎发生在“Transport.send(msg);”行,因为当我运行应用程序时,它从未记录13 正如错误中所说,您不能在主线程上联网。这会导致UI无响应并阻塞所有资源,直到网络任务完成。因此,您需要做的是将网络位移动到
异步任务中
有关更多详细信息,请参阅:call send method from asyncktaskpost调用send()方法的代码感谢@BirajZalavadia发挥了作用