0

我正在运行一个异步任务。在 doinbackground 方法中,我有一个返回 int 或其他值的方法有时可能是布尔值。

我还想在完成时增加我的进度条。问题是如何跟踪计数器?有时数据库查询可能需要一些时间,有时它会更快。:)

   public void getAllSchoolsSearchResult(InputBean nb ,  SearchLogic mLogic){

    mSRLogic=mLogic;
    new AsyncTask<Void, Integer, List<SResultModel>>() {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            mProgressDialog.setProgress(0);
            mProgressDialog.setMax(100);
            mProgressDialog.show();
        }

        @Override
        protected List<SResultModel> doInBackground(
                Void... paramArrayOfParams) {

            progressbar_Status=0;
            while(progressbar_Status<100){

                progressbar_Status += 1;

                publishProgress(progressbar_Status);

            }
            if(ConnectionProvider.checkConnection()==false){
                return null;
            }
            return SearchResultHandler.searchStudent(searchAllSchools);
        }

        @Override
        protected void onPostExecute(List<SResultModel> result) {
            super.onPostExecute(result);

            if(mProgressDialog!=null&&mProgressDialog.isShowing()){
                mProgressDialog.dismiss();
            }

        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);

            mProgressDialog.setProgress(values[0]);

        }






    }.execute();
}
4

2 回答 2

2

在持续时间未知的情况下,您可能应该使用可以通过android:indeterminate布局属性或setIndeterminate方法设置的不确定进度条。

如果您知道您正在执行多少操作,您可以在异步任务中保存一个成员变量或在doInBackground方法中保存一个局部变量。

于 2013-05-08T10:09:15.873 回答
1

publishProgress 不能这样使用。

从您的代码中,您正在显示进度条(什么都不做),然后当它达到 100% 时,您会请求学生。

publishProgress 应该在里面

SearchResultHandler.searchStudent()

取决于它是如何实现的。如果它内部没有循环,您将无法发布任何进度。

在这种情况下,请使用 INDETERMINATE 进度对话框,并且在 doInBackground 中不执行任何操作

protected void onPreExecute() {
    super.onPreExecute();
    mProgressDialog.setIndeterminate(true);
    mProgressDialog.show();
}   


protected List<SResultModel> doInBackground(Void... paramArrayOfParams) {
    if(!ConnectionProvider.checkConnection()) return null;
    return SearchResultHandler.searchStudent(searchAllSchools);
}
于 2013-05-08T10:13:10.733 回答