0

非同期タスクを実行しています。doinbackground メソッドには、int を返すメソッドがあります。または、他の値がブール値になる場合もあります。

また、仕上げに進むにつれてプログレスバーを増やしたいと思っています。問題はカウンターを追跡する方法ですか?db クエリには時間がかかる場合もあれば、高速になる場合もあります。:)

   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メソッドを介して設定できる不確定なプログレス バーを使用する必要があります。

実行している操作の数がわかっている場合は、asynctask 内にメンバー変数を保持するか、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 に答える