1

在代碼中,我嘗試使用http客戶端從Web服務中讀取數據。然後我想寫一個文本視圖的http響應短語。 UI是通過onPostExecute()來訪問的,所以我不知道爲什麼我會得到這個異常。Android:在AsyncTask上獲取RuntimeException

這是代碼:

public class CustomersScreen extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.customersscreen); 
} 

public void LoginClicked(View view) { 
    new Get_data().execute("http://localhost:51982/WcfDataService1.svc/Genre"); 
} 

private class Get_data extends AsyncTask <String, Void, String> { 

    @Override 
    protected String doInBackground(String... url) { 
     //InputStream instream = null; 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpGet request = new HttpGet(url[0]); 
     HttpResponse response = null; 
     try { 
      response = httpclient.execute(request); 
     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     String phrase = response.getStatusLine().getReasonPhrase(); 

     return phrase; 
    } 

    @Override 
    protected void onPostExecute(String phrase) { 
     TextView t = (TextView) findViewById(R.id.textView3); 
     t.setText(phrase); 
    } 

} 

}

和日誌貓:

09-28 09:43:34.239: E/AndroidRuntime(679): FATAL EXCEPTION: AsyncTask #1 
09-28 09:43:34.239: E/AndroidRuntime(679): java.lang.RuntimeException: An error occured while executing doInBackground() 
09-28 09:43:34.239: E/AndroidRuntime(679): at android.os.AsyncTask$3.done(AsyncTask.java:278) 
09-28 09:43:34.239: E/AndroidRuntime(679): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
09-28 09:43:34.239: E/AndroidRuntime(679): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
09-28 09:43:34.239: E/AndroidRuntime(679): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
09-28 09:43:34.239: E/AndroidRuntime(679): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
09-28 09:43:34.239: E/AndroidRuntime(679): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
09-28 09:43:34.239: E/AndroidRuntime(679): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
09-28 09:43:34.239: E/AndroidRuntime(679): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
09-28 09:43:34.239: E/AndroidRuntime(679): at java.lang.Thread.run(Thread.java:856) 
09-28 09:43:34.239: E/AndroidRuntime(679): Caused by: java.lang.NullPointerException 
09-28 09:43:34.239: E/AndroidRuntime(679): at com.test.CustomersScreen$Get_data.doInBackground(CustomersScreen.java:46) 
09-28 09:43:34.239: E/AndroidRuntime(679): at com.test.CustomersScreen$Get_data.doInBackground(CustomersScreen.java:1) 
09-28 09:43:34.239: E/AndroidRuntime(679): at android.os.AsyncTask$2.call(AsyncTask.java:264) 
09-28 09:43:34.239: E/AndroidRuntime(679): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
09-28 09:43:34.239: E/AndroidRuntime(679): ... 5 more 
+0

'由com.test.CustomersScreen $ Get_data.doInBackground(CustomersScreen.java:46)'引發java.lang.NullPointerException '。檢查CustomersScreen.java的第46行的語句 – Rajesh

+0

爲什麼你不只是調試?在CustomerScreen類的第46行放置一個斷點,然後運行它。我敢打賭這是t.setText(短語),並且t是空的 – Simon

回答

1
Caused by: java.lang.NullPointerException 
09-28 09:43:34.239: E/AndroidRuntime(679): at com.test.CustomersScreen$Get_data.doInBackground(CustomersScreen.java:46) 

你在你的類的線46 NPE。該代碼,貼缺少一些線條很明顯,但我想這是該行String phrase = response.getStatusLine().getReasonPhrase();responsenull如果有什麼不對的httpclient.execute(request);

所以,只要把try/catch塊內的線孔,並在添加一個簡單的return null;該方法的結束,而不是。

+0

謝謝真正幫助的人。似乎我的迴應= httpclient.execute(請求);得到一個HttpHostConnectionException我現在想弄明白。它說連接到http:// localhost:51982被拒絕 –

+0

那麼,localhost本身就是Android設備 - 即使你正在測試本地服務器,你也必須提供IP地址(但不是127.0.0.1)。 – Ridcully

+0

我嘗試了本地IP地址,導致服務器在同一臺計算機上並具有相同的異常。所以propably互聯網的IP地址是需要的 –

相關問題