1

次のように、ウェブサイトのコードをアプリにダウンロードしようとしています。

 public void wypned(final View pwn) throws IllegalStateException, IOException{
    HttpClient httpClient = new DefaultHttpClient();
    HttpContext localContext = new BasicHttpContext();
    HttpGet httpGet = new HttpGet("http://example.com");
    HttpResponse response = httpClient.execute(httpGet, localContext);
    String result = "";

    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent() ) );

    String line = null;
    while ((line = reader.readLine()) != null){
    result += line + "\n";
    }
}

そして、私が得たのは致命的なエラーだけです。LogCat は次のように述べています。

Caused by: android.os.NetworkOnMainThreadException
 on Android 3.x and up, you can't do network I/O on the main thread

誰かがそれを解決する方法を教えてもらえますか? スレッドで何かをしようとしましたが、うまくいきませんでした。

4

2 に答える 2

2

それを行うための asyncTask を実装します。

public class MyAsyncTask extends AsyncTask<Void, Void, Result>{

                        private Activity activity;
                        private ProgressDialog progressDialog;

            public MyAsyncTask(Activity activity) {
                            super();
                this.activity = activity;
            }

            @Override
            protected void onPreExecute() {
            super.onPreExecute();
                progressDialog = ProgressDialog.show(activity, "Loading", "Loading", true);
            }

            @Override
            protected Result doInBackground(Void... v) {
            //do your stuff here
            return null;

            }

            @Override
            protected void onPostExecute(Result result) {
                progressDialog.dismiss();
                Toast.makeText(activity.getApplicationContext(), "Finished.", 
                        Toast.LENGTH_LONG).show();
            }


}

アクティビティから呼び出します。

MyAsyncTask task = new AsyncTask(myActivity.this);
task.execute();
于 2012-08-20T16:56:54.427 に答える
0

すべてのネットワーク操作 (ブロックしているため) は、別のスレッドで実行する必要があります。Android dev guide はこれを示唆しています。

android.os.NetworkOnMainThreadException

アプリケーションがメイン スレッドでネットワーク操作を実行しようとしたときにスローされる例外。

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

ネットワーク操作用に別のスレッドを作成してください。基本的にはそれを伝えています。

ネットワーク操作やデータベース操作などの長時間実行される可能性のある操作、またはビットマップのサイズ変更などの計算コストの高い計算は、子スレッドで実行する必要があります。

ソース1 ソース2

于 2012-08-20T16:55:21.493 に答える