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);
Другие вопросы по тегам