安卓:对的AsyncTask获取的RuntimeException [英] Android : Getting RuntimeException on AsyncTask
问题描述
在code我尝试从一个HTTP客户端的Web服务来阅读。然后我想在HTTP的反响的性反应的乐句写入一个文本视图。用户界面是通过onPostExecute访问(),所以我不知道为什么我得到这个例外。
这是code:
公共类CustomersScreen延伸活动{@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.customersscreen);
}公共无效LoginClicked(查看视图){
新GET_DATA()执行(HTTP://本地主机:51982 / WcfDataService1.svc /音乐风格);
}私有类GET_DATA扩展的AsyncTask<弦乐,太虚,字符串> { @覆盖
保护字符串doInBackground(字符串... URL){
// InputStream的河道= NULL;
HttpClient的HttpClient的=新DefaultHttpClient();
HTTPGET请求=新HTTPGET(URL [0]);
HTT presponse响应= NULL;
尝试{
响应= httpclient.execute(请求);
}赶上(ClientProtocolException E){
// TODO自动生成catch块
e.printStackTrace();
}赶上(IOException异常五){
// TODO自动生成catch块
e.printStackTrace();
}
串词= response.getStatusLine()getReasonPhrase()。 返回短语;
} @覆盖
保护无效onPostExecute(串词){
TextView的T =(的TextView)findViewById(R.id.textView3);
t.setText(短语);
}}
}
和日志猫:
9月9日至28日:43:34.239:E / AndroidRuntime(679):致命异常:AsyncTask的#1
9月9日至28日:43:34.239:E / AndroidRuntime(679):了java.lang.RuntimeException:执行doInBackground发生错误()
9月9日至28日:43:34.239:E / AndroidRuntime(679):在android.os.AsyncTask $ 3.done(AsyncTask.java:278)
9月9日至28日:43:34.239:E / AndroidRuntime(679):在java.util.concurrent.FutureTask中$ Sync.innerSetException(FutureTask.java:273)
9月9日至28日:43:34.239:E / AndroidRuntime(679):在java.util.concurrent.FutureTask.setException(FutureTask.java:124)
9月9日至28日:43:34.239:E / AndroidRuntime(679):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:307)
9月9日至28日:43:34.239:E / AndroidRuntime(679):在java.util.concurrent.FutureTask.run(FutureTask.java:137)
9月9日至28日:43:34.239:E / AndroidRuntime(679):在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:208)
9月9日至28日:43:34.239:E / AndroidRuntime(679):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
9月9日至28日:43:34.239:E / AndroidRuntime(679):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:569)
9月9日至28日:43:34.239:E / AndroidRuntime(679):在java.lang.Thread.run(Thread.java:856)
9月9日至28日:43:34.239:E / AndroidRuntime(679):致:显示java.lang.NullPointerException
9月9日至28日:43:34.239:E / AndroidRuntime(679):在com.test.CustomersScreen $ Get_data.doInBackground(CustomersScreen.java:46)
9月9日至28日:43:34.239:E / AndroidRuntime(679):在com.test.CustomersScreen $ Get_data.doInBackground(CustomersScreen.java:1)
9月9日至28日:43:34.239:E / AndroidRuntime(679):在android.os.AsyncTask $ 2.call(AsyncTask.java:264)
9月9日至28日:43:34.239:E / AndroidRuntime(679):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:305)
9月9日至28日:43:34.239:E / AndroidRuntime(679):... 5个
显示java.lang.NullPointerException:
产生的原因
9月9日至28日:43:34.239:E / AndroidRuntime(679):在com.test.CustomersScreen $ Get_data.doInBackground(CustomersScreen.java:46)
您在你的类行46 NPE。在code,贴缺少一些线条很明显,但我想这是此行字符串短语= response.getStatusLine()getReasonPhrase();
为响应
是空
如果有什么错误的 httpclient.execute(请求);
所以,只要把该行的的try / catch
块,以及添加一个简单的返回NULL之内;
在代替该方法的结束。
In the code I try to read from a web service with an http client. Then I want to write the Responce Phrase of the http responce to a text view. The UI is accessed through onPostExecute() so I don't know why I get this exception.
This is the code:
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);
}
}
}
and the log cat :
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)
You have a NPE in line 46 of your class. The code, posted lacks some lines obviously, but I suppose it's this line String phrase = response.getStatusLine().getReasonPhrase();
as response
would be null
if anything goes wrong with the httpclient.execute(request);
So, just put that line within the try/catch
block as well and add a simple return null;
at the end of the method instead.
这篇关于安卓:对的AsyncTask获取的RuntimeException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!