我编写了一个从 Android 设备发送电子邮件的应用程序,但是当我尝试发送电子邮件时出现以下异常:
android.os.NetworkOnMainThreadException
为什么会发生这种情况,我该如何解决?
我编写了一个从 Android 设备发送电子邮件的应用程序,但是当我尝试发送电子邮件时出现以下异常:
android.os.NetworkOnMainThreadException
为什么会发生这种情况,我该如何解决?
哪个 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("");
此异常意味着您正在尝试在主 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);