0

(私は 2.3.3 を使用しています) 次のコードは、進行状況ダイアログ (pd) を表示し、HttpPostindoInBackground()を実行し、 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);
        }  
    }
}
4

0 に答える 0