我真的很困惑为什么我遇到这个问题。我对android开发很新,所以我不确定在解决这个问题时从哪里开始。我在清单文件中拥有所有必需的权限。 <uses-permission android:name="android.permission.INTERNET" />
和<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
。
按下按钮时会调用myClickHandler
并使用两个EditText
创建一个网址。执行此操作后,它会调用downloadWebPageTask
来启动ASyncTask。此AsyncTank获取URL,然后发送GET请求。这是我的代码。
public void myClickHandler(View view) {
SetText url = new SetText();
String stringUrl = url.createURL(artist_text.getText().toString(), release_text.getText().toString());
new DownloadWebpageTask().execute(stringUrl);
}
public class DownloadWebpageTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
// params comes from the execute() call: params[0] is the url.
//SendStuff send = new SendStuff("mrblahblahblacksheep");
//return send.sendGet(urls[0]);
String url = urls[0];
String final_response = "FAILED!";
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse response;
try {
response = client.execute(request);
final_response = response.toString();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return final_response;
}
// onPostExecute displays the results of the AsyncTask.
@Override
protected void onPostExecute(String result) {
result_text.setText(result);
}
}
每次按下模拟器中的按钮,应用程序都会崩溃。没有任何崩溃数据保存在logcat中,所以我不确定是否要找出崩溃的原因。
答案 0 :(得分:0)
这可能是问题所在:
response = client.execute(request);
final_response = response.toString();
如果响应为空,则response.toString()
将抛出NPE,您的应用程序将崩溃。
使错误处理更加优雅。
尝试在遇到异常时从catch块返回null
结果。此外,对于NPE,使if-else阻塞并明确返回null
。
在onPostExecute(...)
中检查结果是否为空,然后显示一些默认文本或显示预期结果。