(我使用的是 2.3.3)下面的代码是一个异步任务,它建立一个进度对话框 (pd),执行一个HttpPost
indoInBackground()
并关闭 in 中的进度对话框onPostExecute()
。大约 75% 的时间它都能完美运行。但是,25% 的时间 pd 被显示并且永远不会消失(但是帖子完成了)。用户摆脱 pd 的唯一方法是进入设置并终止应用程序(即使“可取消设置为 true”)。
没有发生超时异常。
onPostExecute()
没有被执行或pd.dismiss()
不工作。
如果我消除 pd 一切总是 100% 的时间完美。
会发生什么?谢谢。
class postStringToURLTask extends AsyncTask<URL, Void, String> {
String responseString = "";
@Override
protected void onPreExecute() {
String myEmailAddress = getPref("emailaddress");
pd = ProgressDialog.show(PSActivity.this,
"Emailing Trip to " + myEmailAddress, "", true);
}
@Override
protected String doInBackground(URL... urls) {
try {
URL onlyURL = urls[0]; //there is only one url
HttpResponse response = null;
HttpParams myParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(myParams,4000);
HttpConnectionParams.setSoTimeout(myParams, 4000);
HttpClient httpclient = new DefaultHttpClient(myParams);
HttpPost myPost = new HttpPost(onlyURL.toString());
StringEntity se = new StringEntity(payloadString);
myPost.setEntity(se);
myPost.setHeader("Accept", "application/json");
myPost.setHeader("Content-type", "text/plain");
response = httpclient.execute(myPost);
BufferedReader rd = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
String line = "";
while ((line = rd.readLine()) != null) {
responseString = line;
}
} catch (Exception e) {
debugLog("postStringToURLTask got exception" + e.getMessage().toString() , 1);
responseString = "error " + e.getMessage().toString();
}
return responseString;
}
@Override
protected void onPostExecute(String result) {
pd.dismiss();
debugLog("just dismissed progress dialog", 1);
result = result.replace("[","");
result = result.replace("\"","");
result = result.replace("]","");
////log.w(getClass().getName(), "onPostExecute received: " + result);
if (result == "") {
mpGood.start();
} else {
sdTripSentProblem(); //bad news dialog
logToServer(result);
}
}
}