从Android应用程序发送电子邮件时NetworkOnMainThreadException

时间:2014-08-09 05:12:45

标签: java android

我最近在这里发现了一个问题,帮助我设置了一个自动电子邮件客户端,应用程序将在没有任何用户干预的情况下发送电子邮件来传递忘记的密码,但我遇到了NetorkOnMainThreadException问题。这是抛出异常的方法:

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;
    }
}

问题似乎发生在&#34; Transport.send(msg);&#34;因为当我运行应用程序时,它从不记录13.

1 个答案:

答案 0 :(得分:1)

正如它在错误中所说,你不能在主线程上建立网络。这会导致UI无响应并阻塞所有资源,直到网络任务完成为止。所以你要做的就是将网络位移到AsyncTask

有关详细信息,请参阅:http://developer.android.com/reference/android/os/AsyncTask.html