在尝试使用ASyncTask发出GET请求时,如何阻止我的应用崩溃?

时间:2015-05-16 23:21:06

标签: java android get

我真的很困惑为什么我遇到这个问题。我对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中,所以我不确定是否要找出崩溃的原因。

1 个答案:

答案 0 :(得分:0)

这可能是问题所在:

response = client.execute(request);
final_response = response.toString();

如果响应为空,则response.toString()将抛出NPE,您的应用程序将崩溃。

使错误处理更加优雅。

尝试在遇到异常时从catch块返回null结果。此外,对于NPE,使if-else阻塞并明确返回null

onPostExecute(...)中检查结果是否为空,然后显示一些默认文本或显示预期结果。