无法关闭AsyncTask中的进度条

时间:2012-09-07 09:06:41

标签: android

我想使用progressbar将数据从列表加载到gridview并使用加载效果。我从webservice获取项目。我面临的问题是即使在显示gridview后我也无法关闭进度条。我可以看到gridview有项目,但进度条仍然在运行。我在这里做错了什么。

private void testAsyncTask() {
        Log.e("Im in testAsyncTask()", "");
        new AsyncTask<Object, Object, Object>() {

            @Override
            protected void onPreExecute() {

                progress_Dialog = ProgressDialog.show(a, "", "Loading");


                Log.e("Im in onPreExecute", "");
                // super.onPreExecute();
            }

            @Override
            protected Integer doInBackground(Object... params) {
                MenuService menuService = new MenuServiceImpl();
                PartnerMenuServiceResponse partnerMenu = menuService
                        .getPartnerMenu();
                jewellist = partnerMenu.getMenu().getMenuEntries();
                Log.e("Im in doInBackground", "");
                System.gc();

                return 0;
            }

            @Override
            protected void onPostExecute(Object result) {
                // TODO Auto-generated method stub
                // super.onPostExecute(result);asd
                Log.e("Im in onPostExecute", "");
                 if (progress_Dialog.isShowing()) {
                     progress_Dialog.dismiss();
                    }
                 ShopGridAdapter adapter = new ShopGridAdapter(ShopGridActivity.this, jewellist);
                 AllJewelgridView.setAdapter(adapter);
                    adapter.notifyDataSetChanged();

                //AllJewelgridView.setAdapter(new ShopGridAdapter(
                    //  ShopGridActivity.this, jewellist));

                if (AllJewelgridView.getCount() <= 0) {
                    MyAlertDialog.ShowAlertDialog(ShopGridActivity.this, "",
                            "No data found.", "OK");
                }
                progress_Dialog.dismiss();
            }

        }.execute();

    }

3 个答案:

答案 0 :(得分:2)

@Override
protected void onPreExecute() {
    progress_Dialog = new ProgressDialog(context);
    progress_Dialog.setMessage("Loading...");
    progress_Dialog.show();
}

编辑:

@Override
protected void onPostExecute(Object result) {
    Log.e("Im in onPostExecute", "");     <------ ARE YOU ABLE SEE THIS IN logcat ?
    progress_Dialog();
}

可能未调用onPostExecute()。所以要确认检查logcat

答案 1 :(得分:1)

您需要在AsyncTask

中添加一些代码
 ProgressDialog progress=null;
progress=ProgressDialog.show(this,"title","loading..").show();//put this code in onPreExecute()
progress.dismiss();//put this code in onPostExecute()

了解更多ProgressBar while loading ListView (using AsyncTask)

答案 2 :(得分:0)

你可以写onPostExecute方法可以帮到你。

 if ( progress_Dialog != null) {
             progress_Dialog.cancel();
        }