1

Android デバイスから電子メールを送信するアプリケーションを作成しましたが、電子メールを送信しようとすると次の例外が発生します。

android.os.NetworkOnMainThreadException

なぜこれが発生し、どうすれば修正できますか?

4

2 に答える 2

7

どの 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("");
于 2013-08-18T09:08:19.377 に答える
1

この例外は、メイン UI スレッドでネットワーク関連の操作を実行しようとしていることを意味します。別のスレッドまたは AsyncTask で行う必要があります。

ドキュメントには次のように記載されています。

アプリケーションがメイン スレッドでネットワーク操作を実行しようとしたときにスローされる例外。これは、 Honeycom SDK 以降を対象とするアプリケーションに対してのみスローされます。以前のバージョンの SDK を対象とするアプリケーションは、メイン イベント ループ スレッドでネットワークを実行できますが、推奨されません。

「android.os.NetworkOnMainThreadException」を修正するにはどうすればよいですか? を参照してください。およびAndroid - android.os.NetworkOnMainThreadExceptionで詳細を確認できます。

何かのようなもの:

class RetreiveFeedTask extends AsyncTask<String, Void, Void> {

    protected Void doInBackground(String... urls) {
        // Execute the network related option here
    }

    protected void onPostExecute(Void param) {

        // TODO: do something with the feed
    }
}

タスクの実行方法は次のとおりです。

new RetreiveFeedTask().execute(urlToRssFeed);
于 2013-08-18T09:04:53.820 に答える