我已经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);
}
}
}
答案 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()方法。