(私は 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);
}
}
}