android.os.NetworkOnMainThreadException отправка электронного письма с Android
Я написал приложение, которое отправляет электронную почту с устройства Android, но я получаю следующее исключение при попытке отправить электронное письмо:
android.os.NetworkOnMainThreadException
Почему это происходит и как я могу это исправить?
2 ответа
Какая версия 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("");
Это исключение означает, что вы пытаетесь выполнить операцию, связанную с сетью, в основном потоке пользовательского интерфейса. Вам нужно сделать это либо в отдельном потоке, либо в AsyncTask.
В документации сказано, что:
The exception that is thrown when an application attempts to perform a
networking operation on its main thread. This is only thrown for applications
targeting the Honeycomb SDK or higher. Applications targeting earlier SDK
versions are allowed to do networking on their main event loop threads, but it's
heavily discouraged
Смотрите Как исправить android.os.NetworkOnMainThreadException? и Android - android.os.NetworkOnMainThreadException для получения дополнительной информации. Для получения дополнительной помощи вам может понадобиться показать больше кода.
Что-то вроде:
class RetreiveFeedTask extends AsyncTask<String, Void, Void> {
protected Void doInBackground(String... urls) {
//Execurte the network related option here
}
protected void onPostExecute(Void param) {
// TODO: do something with the feed
}
}
Вот как выполнить задачу:
new RetreiveFeedTask().execute(urlToRssFeed);