Я написал приложение, которое отправляет письмо с устройства Android, но при попытке отправить электронное письмо я получаю следующее исключение:
android.os.NetworkOnMainThreadException
Почему это происходит и как я могу его исправить?
Я написал приложение, которое отправляет письмо с устройства Android, но при попытке отправить электронное письмо я получаю следующее исключение:
android.os.NetworkOnMainThreadException
Почему это происходит и как я могу его исправить?
Какая версия SDK? Если 14+ см. эту ссылку.
решение
JUST FOR DEBUG
добавить эти строки
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
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);