Android.os.NetworkOnMainThreadException отправляет электронное письмо с Android

Я написал приложение, которое отправляет письмо с устройства Android, но при попытке отправить электронное письмо я получаю следующее исключение:

android.os.NetworkOnMainThreadException

Почему это происходит и как я могу его исправить?

Ответы

Ответ 1

Какая версия 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("");

Ответ 2

Это исключение означает, что вы пытаетесь выполнить операцию, связанную с сетью, в основном потоке пользовательского интерфейса. Вам нужно сделать либо в отдельном потоке, либо в 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);