android - ProgressDialog在任务完成时显示得太晚了

时间:2016-08-23 17:29:08

标签: android

我正在尝试从数据库中获取一些数据。 我希望同时显示progressDialog,同时从数据库加载数据。

我正在使用扩展AsyncTask的类BgClass。 在preExecute上我显示对话框,在postExecute上我解除了对话。

但是,在从数据库加载数据后,对话框仍会显示,并被解除,即使不显示。

public class BgClass extends AsyncTask<parameters>{

ProgressDialog dialog;

BgClass(Context context){

    dialog = new ProgressDialog(context);
    dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    dialog.setMessage("Loading ...");
    dialog.setIndeterminate(true);
    dialog.setCanceledOnTouchOutside(false);
}

@Override
protected doInBackground(parameter) {

    //fetching entries from DB
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
    dialog.show();

}

@Override
protected void onPostExecute(parameter) {
    super.onPostExecute(ratingBackendlessCollection);
    dialog.dismiss();
}

}

ps - 我已经正确地调用了构造函数,并且还使用相同的对象执行。

这是调用BgClass对象的callingActivity或java文件的代码(删除了一些不相关的代码);

public class SeeComments extends AppCompatActivity{

//variable initialisation

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.see_comments);

    list = new ArrayList<>();

    btnLoadMore = new Button(this);
    btnLoadMore.setText("Load More");

    lv_sc_cmnt.addFooterView(btnLoadMore);

    adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, list);

    lv_sc_cmnt.setAdapter(adapter);

    context = this;

    btnLoadMore.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            addMoreToList();
        }
    });

    ActionBar ab = getSupportActionBar();
    ab.setDisplayHomeAsUpEnabled(true);
}

private void addMoreToList() {

    offset+=pageSize;

    if (list.size()<totalReviews) {

        BgClass bgClass = new BgClass(resAll,pageSize,offset,this);

        try {
            resAll = bgClass.execute(resAll, null, null).get();
        }catch (InterruptedException e){
            Toast.makeText(this,e.getMessage(),Toast.LENGTH_LONG).show();
        }catch (ExecutionException e){
            Toast.makeText(this,e.getMessage(),Toast.LENGTH_LONG).show();
        }

       // add loaded data to list

        adapter.notifyDataSetChanged();
    } else {
        Toast.makeText(this, "All reviews loaded", Toast.LENGTH_LONG).show();
    }
}

}

2 个答案:

答案 0 :(得分:1)

您还必须覆盖onProgressUpdate:

 @Override
 protected void onProgressUpdate(Integer... progress) {
     setProgressPercent(progress[0]);
 }

 setProgressPercent(int value) {
    dialog.setMessage("Loaded value " + value);
 }

参考:Android Dev site

答案 1 :(得分:0)

将进度对话框移至onPreExecute

使用getActivity()作为上下文

private static <T extends Number> void processNumberList(List<T> l) {
}