1

我编写了一个从 Android 设备发送电子邮件的应用程序,但是当我尝试发送电子邮件时出现以下异常:

android.os.NetworkOnMainThreadException

为什么会发生这种情况,我该如何解决?

4

2 回答 2

7

哪个 SDK 版本?如果 14+ 看到这个链接

解决方案是

仅用于调试

添加这些行

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

真实案例

将代码放在 AsyncTask 上:

private class Connection extends AsyncTask {
    @Override
    protected Object doInBackground(Object... arg0) {

        connect();
        return null;
    }
}

然后调用:

new Connection().execute("");
于 2013-08-18T09:08:19.377 回答
1

此异常意味着您正在尝试在主 UI 线程上执行与网络相关的操作。您需要在单独的线程或 AsyncTask 中执行。

文档说:

当应用程序尝试在其主线程上执行网络操作时引发的异常。这仅针对面向Honeycomb SDK 或更高版本的应用程序抛出。允许以早期 SDK 版本为目标的应用程序在其主事件循环线程上进行网络连接,但非常不鼓励这样做。

请参阅如何修复“android.os.NetworkOnMainThreadException”?Android - android.os.NetworkOnMainThreadException更多。

就像是:

class RetreiveFeedTask extends AsyncTask<String, Void, Void> {

    protected Void doInBackground(String... urls) {
        // Execute the network related option here
    }

    protected void onPostExecute(Void param) {

        // TODO: do something with the feed
    }
}

这是执行任务的方法:

new RetreiveFeedTask().execute(urlToRssFeed);
于 2013-08-18T09:04:53.820 回答