Android:在AsyncTask上获取RuntimeException
在代码中,我尝试使用http客户端读取web服务。然后,我想将http响应的响应短语写入文本视图。UI是通过onPostExecute()访问的,所以我不知道为什么会出现此异常 代码如下:Android:在AsyncTask上获取RuntimeException,android,android-emulator,android-asynctask,runtimeexception,Android,Android Emulator,Android Asynctask,Runtimeexception,在代码中,我尝试使用http客户端读取web服务。然后,我想将http响应的响应短语写入文本视图。UI是通过onPostExecute()访问的,所以我不知道为什么会出现此异常 代码如下: public class CustomersScreen extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); se
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);
}
}
你们班第46行有一个NPE。posted的代码显然缺少一些行,但我想应该是这一行stringphrase=response.getStatusLine().getReasonPhrase()如果httpclient.execute(请求)出现任何问题,那么code>asresponse
将为null
代码>
因此,只需将该行放在try/catch
块中,并添加一个简单的返回null改为在方法的末尾使用code>
你们班第46行有一个NPE。posted的代码显然缺少一些行,但我想应该是这一行stringphrase=response.getStatusLine().getReasonPhrase()如果httpclient.execute(请求)出现任何问题,那么code>asresponse
将为null
代码>
因此,只需将该行放在try/catch
块中,并添加一个简单的返回null改为在方法末尾使用code>。由以下原因引起:com.test.CustomersScreen$Get\u data.doInBackground(CustomersScreen.java:46)
。检查CustomersScreen.java第46行的语句为什么不调试一下呢?在CustomerScreen类的第46行中放置一个断点,然后运行它。我打赌这是t.setText(短语),t为null,原因是:com.test.CustomersScreen$Get_data.doInBackground(CustomersScreen.java:46)
。检查CustomersScreen.java第46行的语句为什么不调试一下呢?在CustomerScreen类的第46行中放置一个断点,然后运行它。我打赌是t.setText(短语)和t才是真正有帮助的人。似乎我的响应=httpclient.execute(请求);获取一个HttpHostConnectionException,我正在尝试找出它。它说连接到refusedWell,localhost应该是Android设备本身——你必须提供IP地址(但不是127.0.0.1),即使你正在测试本地服务器。我尝试了本地IP地址,因为服务器在同一台计算机上,并且有相同的异常。因此,很可能需要的是internet IP地址,这就是所需的地址。最后,如果服务器是本地主机,则必须使用10.0.2.2作为ip。emulator将此ip视为本地主机。感谢您的帮助。似乎我的响应=httpclient.execute(请求);获取一个HttpHostConnectionException,我正在尝试找出它。它说连接到refusedWell,localhost应该是Android设备本身——你必须提供IP地址(但不是127.0.0.1),即使你正在测试本地服务器。我尝试了本地IP地址,因为服务器在同一台计算机上,并且有相同的异常。因此,很可能需要的是internet IP地址,这就是所需的地址。最后,如果服务器是本地主机,则必须使用10.0.2.2作为ip。emulator将此ip视为本地主机。
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
Caused by: java.lang.NullPointerException
09-28 09:43:34.239: E/AndroidRuntime(679): at com.test.CustomersScreen$Get_data.doInBackground(CustomersScreen.java:46)