2013-07-24 28 views
0

你好,我要取一個JSON飼料,這就是爲什麼我使用這個代碼:越來越JSON飼料裏面的AsyncTask,但工作不是在OnCreate中

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 

回答

2

通過直接在onCreate()運行的代碼,你試圖在UI線程上做網絡通信。 Android不允許在主線程中聯網,並且會拋出android.os.NetworkOnMainThreadException。你正在捕獲一個類型爲Exception這是所有運行時錯誤 - 否則你的程序將崩潰與上述原因。捕獲所有異常並不是最佳做法,因爲除了您正在防範的失敗模式之外,您可能會遇到一個失敗模式,如果程序繼續,將導致問題。

你應該繼續使用AsyncTask,它會工作

+0

謝謝老兄! 'AsyncTask'在做我的工作,但是我正在嘗試在'onCreate()'中做,並且不知道爲什麼它沒有工作。感謝您的解釋。 –