在代碼中,我嘗試使用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
'由com.test.CustomersScreen $ Get_data.doInBackground(CustomersScreen.java:46)'引發java.lang.NullPointerException '。檢查CustomersScreen.java的第46行的語句 – Rajesh
爲什麼你不只是調試?在CustomerScreen類的第46行放置一個斷點,然後運行它。我敢打賭這是t.setText(短語),並且t是空的 – Simon