3

私は以下のいくつかのコードを持っています:

protected void testConnection(String url) {
    DefaultHttpClient httpclient = new DefaultHttpClient();
    HttpGet httpget = new HttpGet(url);
    ResponseHandler<String> responsehandler = new BasicResponseHandler();

    try {
        String connection = httpclient.execute(httpget, responsehandler);
        Toast.makeText(getBaseContext(), R.string.connection_succeed, Toast.LENGTH_SHORT).show();
        view_result.setText(connection);
    } catch(IOException e) {
        Toast.makeText(getBaseContext(), R.string.connection_failed, Toast.LENGTH_SHORT).show();
    }
    httpclient.getConnectionManager().shutdown();
}

Menifestに権限を追加します。

<uses-permission android:name="android.permission.INTERNET"/>

しかし、それは例外になります:NetworkOnMainThreadException、どうすればよいですか?

4

4 に答える 4

7

ICS以降では、UIスレッドでネットワーク操作を実行できなくなりました。代わりに、新しいスレッドを作成し、そこでネットワーキングを行う必要があります。

可能なツールはAndroidAsyncTaskと通常のJavaThreadです。

良いチュートリアルはここにあります:Androidスレッド、ハンドラー、AsyncTask-チュートリアル

于 2012-07-31T09:01:48.053 に答える
1

API 11以降、メインスレッドでネットワーク(時間のかかる)操作を操作することはできません。AsyncTaskまたはを使用Threadして、そのような操作を実行します。

于 2012-07-31T09:01:21.583 に答える
1

android Api Level 11以降、イベントスレッドでネットワーク操作を実行することはできません。代わりに、イベントスレッド以外のスレッドでネットワーク操作を実行し、HandlerまたはAsynctaskを使用して実行する必要があります。

于 2012-07-31T09:02:39.887 に答える
0

私はあなたがアンドロイド2.xとその下位バージョンであなたのコードを実行します、私はこのコードが完全に実行されると思います。ただし、これを3.xで実行し、それが上位バージョンである場合は、例外が発生します。問題は、ワーカースレッド(AsyncTask <>)からWebサービスを呼び出す必要があることです。メインスレッドからWebサービスを呼び出すことはできません。

于 2012-10-25T10:10:25.217 に答える