在Android上的AsyncTask中捕获HttpGet中的错误

时间:2014-08-13 14:52:24

标签: android android-asynctask http-get

我已经AsyncTask工作了HttpGet。找到HTML文本文件时它可以正常工作,但是当找不到HTML文件时,我想在TextView中显示一些内容。现在,在找不到HTML时显示文本在我的手机上运行正常,这是Android 2.3.4,但在我的平板电脑上,(Android 4.4.4)它就像onPostExecute从未发生过因为ProgressDialog永远不会被删除,文本不会显示在TextView中。关于这里的问题是什么想法? AsyncTask

private class GetURLData extends AsyncTask<String, Void, Void> {
    private final HttpClient Client = new DefaultHttpClient();
    private String HTMLStr;
    private String Error = null;
    private ProgressDialog htmlDialog = new ProgressDialog(
            MyActivity.this);

    protected void onPreExecute() {
        htmlDialog.setMessage("Please Wait...");
        htmlDialog.show();
    }

    @Override
    protected Void doInBackground(String... urls) {
        try {
            HttpGet httpget = new HttpGet(urls[0]);
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            HTMLStr = Client.execute(httpget, responseHandler);
        } catch (ClientProtocolException e) {
            Error = e.getMessage();
            cancel(true);
        } catch (IOException e) {
            Error = e.getMessage();
            cancel(true);
        }
        return null;
    }

    protected void onPostExecute(Void unused) {
        htmlDialog.dismiss();

        if (Error != null) {

            HTML_TV.setText(Html.fromHtml("<b>" + titleStr
                    + "</b> <br>" + bodyStr));


        } else {
            Spanned spanned = Html.fromHtml(HTMLStr,
                    MyActivity.this, null);
            HTML_TV.setText(spanned);
        }

    }
}

1 个答案:

答案 0 :(得分:3)

在doInBackground方法中捕获异常时调用cancel(true);。这意味着, onPostExecute将不会被调用

请参阅cancel(boolean mayInterruptIfRunning)的文档,其中包含&#34;调用此方法可确保永远不会调用onPostExecute(Object)。&#34; http://developer.android.com/reference/android/os/AsyncTask.html#cancel(boolean)

我认为您应该填写onCancelled(Result result)方法,或者根本不应该使用cancel()方法。