-3

このエラーはエミュレータでのみ発生しますが、完全にモバイルで実行されます...

エラー

07-30 05:38:09.024: E/AndroidRuntime(941): android.os.NetworkOnMainThreadException

07-30 05:38:09.024: E/AndroidRuntime(941):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)

07-30 05:38:09.024: E/AndroidRuntime(941):  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)

07-30 05:38:09.024: E/AndroidRuntime(941):  at libcore.io.IoBridge.connectErrno(IoBridge.java:127)

07-30 05:38:09.024: E/AndroidRuntime(941):  at libcore.io.IoBridge.connect(IoBridge.java:112)

07-30 05:38:09.024: E/AndroidRuntime(941):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)

07-30 05:38:09.024: E/AndroidRuntime(941):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)

07-30 05:38:09.024: E/AndroidRuntime(941):  at java.net.Socket.connect(Socket.java:842)

07-30 05:38:09.024: E/AndroidRuntime(941):  at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)

07-30 05:38:09.024: E/AndroidRuntime(941):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)

07-30 05:38:09.024: E/AndroidRuntime(941):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)

07-30 05:38:09.024: E/AndroidRuntime(941):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)

07-30 05:38:09.024: E/AndroidRuntime(941):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)

07-30 05:38:09.024: E/AndroidRuntime(941):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)

07-30 05:38:09.024: E/AndroidRuntime(941):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)

07-30 05:38:09.024: E/AndroidRuntime(941):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
4

2 に答える 2

3

Honeycombe の UI スレッドでネットワーク IO を実行することはできません。技術的には、以前のバージョンの Android でも可能ですが、アプリが応答しなくなり、OS が不適切な動作のためにアプリを強制終了する可能性があるため、非常に悪い考えです。バックグラウンド プロセスを実行するか、AsyncTask を使用してバックグラウンド スレッドでネットワーク トランザクションを実行する必要があります。

それでも、アプリに強制的に実行させたい場合は、次のコードを使用します。

if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                    .permitAll().build();

            StrictMode.setThreadPolicy(policy);
        }

しかし、繰り返しますが、使用することはお勧めできません。詳細については、このリンクを参照してください。

于 2013-07-30T06:33:52.583 に答える
1

このエラーは、メイン スレッドでのネットワーク関連の操作が原因で、Android ICS バージョン以降、ネットワーク関連のコードを実行する必要があります。AsyncTask ..

private class MyTask extends AsyncTask<Void , Void, Void > {

   private Exception exception;

   protected Void doInBackground(Void... urls) {      
      // your code here    
   }

   protected void onPostExecute(Void feed) {

   }
}

このように非同期タスクを呼び出します

MyTask task = new MyTask ();
task.execute();
于 2013-07-30T06:31:23.030 に答える