0

こんにちは、JSON フィードを取得する必要があるため、次のコードを使用しています。

try {

        DefaultHttpClient httpclient = new DefaultHttpClient(
                new BasicHttpParams());
        HttpGet httpget = new HttpGet(CommonUtils.URL);
        httpget.setHeader("Authorization", "Bearer " + CommonUtils.BEARER_TOKEN);
        httpget.setHeader("Content-type", "application/json");

        InputStream inputStream = null;
        HttpResponse response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();
        inputStream = entity.getContent();
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(inputStream, "iso-8859-1"), 8);
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        inputStream.close();
    } catch (Exception e) {
        Log.e("GetFeedTask", "Error:" + e.getMessage());
    }

これは、このコードを内部AsyncTaskで使用して呼び出すと機能しますが、で直接呼び出すとonCreate()機能せず、例外をスローします。どうしたの?GetFeedTaskonCreate()

ログキャット:

GetFeedTask  Error: null
4

1 に答える 1

2

コードを直接実行することonCreate()で、UI スレッドでネットワーク通信を行おうとしています。Android では、メイン スレッドでのネットワーキングが許可されておらず、android.os.NetworkOnMainThreadException. すべての実行時エラーのタイプをキャッチしてExceptionいます。そうしないと、上記の理由でプログラムがクラッシュします。すべての Exception をキャッチすることはベスト プラクティスではありません。保護しているモード以外のエラー モードが存在する可能性があるため、プログラムを続行すると問題が発生する可能性があります。

を使用し続ける必要がありますAsyncTask

于 2013-07-24T21:07:56.000 に答える