Android.OS.NetworkOnMainThreadException envoyer un e-mail à partir D'Android [dupliquer]

cette question a déjà une réponse ici:

j'ai écrit une application qui envoie un courrier électronique à partir d'un appareil Android, mais j'obtiens l'exception suivante lorsque j'essaie d'envoyer un courriel:

android.os.NetworkOnMainThreadException

pourquoi cela se produit-il et comment puis-je le corriger?

0
demandé sur ataulm 2013-08-18 13:03:03

2 réponses

quelle version SDK? Si 14+ voir ce lien .

la solution est

JUST FOR DEBUG

ajouter ces lignes

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

Cas Réel Mettez le code sur un AsyncTask

private class Connection extends AsyncTask {
    @Override
    protected Object doInBackground(Object... arg0) {

        connect();
        return null;
    }
}

puis appeler

new Connection().execute("");
6
répondu venergiac 2016-09-09 05:53:38

cette exception signifie que vous essayez de faire une opération liée au réseau sur le thread principal de L'interface utilisateur. Vous devez faire soit dans un fil séparé ou dans AsyncTask.

Le documentation dit que:

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

Voir Comment réparer android.OS.NetworkOnMainThreadException? et Android - android.OS.NetworkOnMainThreadException pour plus d'. Pour obtenir plus de vous aider à pourriez avoir besoin de montrer plus de code.

quelque chose comme:

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
    }
}

Voici comment exécuter la tâche:

new RetreiveFeedTask().execute(urlToRssFeed);
1
répondu Shobhit Puri 2017-05-23 11:54:34