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