简体   繁体   English

为什么在按下“后退”按钮时出现“进度对话框”?

[英]Why is the Progess Dialog appearing when back button is pressed?

When I go back to the previous activity by pressing the back button the progress dialog is appearing and not disappearing. 当我通过按“后退”按钮返回上一个活动时,进度对话框会出现,但不会消失。 When I minimize they the app the progress dialog disappears. 当我最小化它们时,进度对话框将消失。

Here is the code for the async class 这是异步类的代码

public class BackGroundTask extends AsyncTask<String, String, JSONObject> {
    List<NameValuePair> postparams = new ArrayList<NameValuePair>();
    private ProgressDialog pd;
    String url = null;
    String method = null;
    Context context;


    public BackGroundTask(String url, String method,
            List<NameValuePair> params, Context context) {
        this.url = url;
        postparams = params;
        this.method = method;
        this.context = context;

        //pd = new ProgressDialog(context);
        //pd.setTitle("Processing...");
        //pd.setMessage("Please wait.");
        //pd.setCancelable(false);
        //pd.setIndeterminate(true);

    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pd = new ProgressDialog(context);
        pd = ProgressDialog.show(context, "Processing...", "Please wait.", true, false);

    }

    @Override
    protected void onPostExecute(JSONObject result) {
        super.onPostExecute(result);
        pd.dismiss();
    }

    @Override
    protected JSONObject doInBackground(String... params) {
        // TODO Auto-generated method stub
        // Making HTTP request
        try {
            // Making HTTP request
            // check for request method

            if (method.equals("POST")) {
                // request method is POST
                // defaultHttpClient
                HttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(postparams));

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();

            } else if (method == "GET") {
                // request method is GET
                HttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(postparams,
                        "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);

                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
            }

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {

            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();

        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }
        System.out.println(json);

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        //pd.dismiss();

        // return JSON String
        return jObj;

    }


}

You aren't dismissing it when you finish the Activity and the task must not be done. 当您完成“ Activity时,您并没有解雇它,并且一定不能完成任务。 Override finish() and dismiss it if needed Override finish()并在需要时将其关闭

@Override
public void finish()
{
     if (pd.isShowing()
     {
          pd.dismiss();
     }
     super.finish();
}

You could also Override onBackPressed() and put this code there but since pressing the back button calls finish() its probably safer just to do it there. 您也可以Override onBackPressed()并将此代码放置在此处,但是由于按下后退按钮会调用finish()在此操作可能更安全。

Also, you are comparing Strings correctly in one place 另外,您在一处正确比较Strings

if (method.equals("POST"))  // correct

but not others 但其他人没有

else if (method == "GET")  // incorrect

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM