让JSON提要在AsyncTask中运行,但不在oncreate中

时间:2013-07-24 21:01:42

标签: android json android-asynctask

您好我必须获取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()中调用它但不起作用时,这是有效的,当我直接调用它时抛出异常 GetFeedTask onCreate()。有什么问题?

logcat的:

GetFeedTask  Error: null

1 个答案:

答案 0 :(得分:2)

通过直接在onCreate()中运行代码,您尝试在UI线程上进行网络通信。 Android不允许主线程上的网络,并将抛出android.os.NetworkOnMainThreadException。您正在捕获类型Exception,它适用于所有运行时错误 - 否则您的程序将因以上原因而崩溃。捕获所有异常并不是最好的做法,因为除了您要保护的模式之外,如果程序继续存在,则可能会出现故障模式。

您应该继续使用AsyncTask,它会正常工作

相关问题