android AsyncTask不会忽略Progressbar

时间:2015-05-04 06:13:14

标签: android android-asynctask

在我的应用程序中,我需要像这样调用for循环中的AsyncTask

 protected void runSearch(String query) {


            for (int i = 0; i < MAX_RESULT_COUNT; i += PAGE_SIZE) {
                try {
                    String s = SEARCH_ENDPOINT + "&q="
                            + URLEncoder.encode(query, "UTF-8") + "&start=" + i;
                    // Toast.makeText(this, "qUERY>>  " + s + "",
                    //
                    // Toast.LENGTH_SHORT).show();
                    System.out.println("THISI SSS>>>>> ss" + s + "");

                    String se = SEARCH_ENDPOINT + "&q="
                            + URLEncoder.encode(query, "UTF-8") + "&start=" + i;


                    Get_Images get_images = new Get_Images();
                    get_images.execute(se);


                } catch (UnsupportedEncodingException e) {
                    // TODO: handle error
                }
            }
        }

类Get_Images

public class Get_Images extends AsyncTask<String, Void, Void> {
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                pDialog = new ProgressDialog(getActivity());
                pDialog.setMessage("Please wait...");
                pDialog.setCancelable(true);
                pDialog.show();
            }


            @Override
            protected Void doInBackground(String... params) {

                ServiceHandler sh = new ServiceHandler();

                // Making a request to url and getting response

                return null;

            }

            @Override
            protected void onPostExecute(Void aVoid) {
                super.onPostExecute(aVoid);
                 if (pDialog.isShowing())
                 {
                 pDialog.dismiss();
                 }
                if (ThumbImage != null) {

                    //Adpter fill
                }
            }

    }

问题是它不会忽略进度对话框。如果它创建了3个对话框,则不会忽略它们中的任何一个。

请求帮助 谢谢,

1 个答案:

答案 0 :(得分:0)

我认为通过在AsyncTask循环中调用for,它可能会启动另一个任务,而前一个任务仍在doInbackground()中,这会导致多个进度因此而运行:

pDialog = new ProgressDialog(getActivity());

您将参考上次开始的进度,因此致电 解雇只会隐藏最后一个,而其他X进度将保持活动

所以,要么:

  1. 开始进度一次,然后开始for loop 并在最后一次asyncTask
  2. onPostExecute()处停止

    1. doInBackground()内的for循环移动为@StackOverflowUser声明