我的进度对话框在android中保持打开状态

时间:2014-04-22 12:58:37

标签: android android-asynctask progressdialog

我做了一个asynctask从webservice获取一些Json响应。我在显示后台处理时使用了一个进度条,并完成了我的asynctask.Thing的onPostExecute方法中的进度对话是我得到了成功的响应根据需要,但是myl进度对话在此之后仍然可见,请任何人告诉我如何解雇它。我的代码如下: 的 main.java

私有类DoFavourite扩展了AsyncTask {

@Override
protected void onPreExecute() {
    super.onPreExecute();
    // Showing progress dialog
    pDialog = new ProgressDialog(ProductDetailActivity.this);
    pDialog.setMessage("Please wait...");
    pDialog.setCancelable(false);
    pDialog.show();

}

@Override
protected Void doInBackground(Void... arg0) {
    String favUrl = Const.API_DO_FAVOURITE + "?product_id=" + pid + "&customer_id=" + Pref.getValue(ProductDetailActivity.this, Const.PREF_CUSTOMER_ID, "");
    System.out.println(":::::::::my FAVOURITE URL::::::::::::::" + favUrl);
    // Creating service handler class instance
    BackendAPIService sh = new BackendAPIService();

    // Making a request to url and getting response
    String jsonStr = sh.makeServiceCall(favUrl, BackendAPIService.GET);

    Log.d("Response: ", "> " + jsonStr);
    System.out.println("=============MY RESPONSE==========" + jsonStr);

    if (jsonStr != null) {
        try {
            JSONObject jsonObj = new JSONObject(jsonStr);
            if (jsonObj.has(Const.TAG_STATUS)) {
                if (jsonObj.getString(Const.TAG_STATUS).equalsIgnoreCase("success")) {
                    if (jsonObj.getString(Const.TAG_FAVOURITE).equalsIgnoreCase("1")) {
                        flag = 1;
                    } else {
                        flag = 2;
                    }

                }
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
    } else {
        Log.e("ServiceHandler", "Couldn't get any data from the url");
    }

    return null;
}

@Override
protected void onPostExecute(Void result) {
    super.onPostExecute(result);
    // Dismiss the progress dialog
    if (pDialog.isShowing())
        pDialog.dismiss();

}

}

1 个答案:

答案 0 :(得分:0)

您没有正确使用进度对话框。您会注意到IDE在pd.show(...)行旁边显示一个简洁的小警告标志。

你在做什么

使用新的ProgressDialog()

创建一个(不可见的,不相关的)进度对话框

使用pd.Show()创建带有所需文本的另一个进度对话框,而不存储对它的引用。

关闭第一个对话框。 (2)中的对话框仍然存在。

如果您用以下代码替换代码:

//pd = new ProgressDialog(this); 

pd = ProgressDialog.show(this, "Waiting...", "Please wait five seconds...");