停止主线程并显示进度对话框

时间:2016-08-29 09:12:38

标签: android android-asynctask progressdialog

大家好,我有一个异步任务,我从网上获得积分,根据这些点,我必须决定我应该在主线程上显示哪个弹出窗口。例如,如果积分较少,我应该显示“购买积分”屏幕,否则显示“购买项目”屏幕。我还想显示progressdialog直到加载积分

如果我这样做,主线程将停止,直到加载点但进度对话框不会显示

   String str_result= new Jsontask().execute("my url" + uid).get(); 

如果我执行此进度对话框显示但加载的点数是错误的

 new Jsontask().execute("my url" + uid);

我的async taks

 class Jsontask extends AsyncTask<String, String, String> {

    ProgressDialog  pdia;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
       pdia = new ProgressDialog(PopupActivity.this);
        pdia.setMessage("Loading...");
        pdia.show();
    }

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

    // get my points here

        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        System.out.println(result);
        setRewardpoints(Integer.parseInt(result));
         pdia.dismiss();
    }

}

如何在异步任务完成之前显示progressdialog并停止执行主线程?

1 个答案:

答案 0 :(得分:1)

你应该创建一个新的interface,它将包含一个回调方法,你将在postExecute方法中调用它,将它作为参数返回的点数

public interface jsonTaskCallback{
  public void pointsProcessing(int point);}

现在您应该从interface类中的JsonTask创建一个新属性,并添加新的构造函数,该构造函数的参数为​​JsonTAskCallback变量。

JsonTaskCallBack taskCallBack;    
public JsonTask(JsonTaskCallBack taskCallBack){
           this.taskCallBack = taskCallBack;
}

之后调用JsonTaskCallBack$pointsPrecessing方法中的postExecute方法,然后使用此语句:

 new Jsontask(new JsonTaskCallback(){
      @Override
      public void pointsProcessing(int point){
           // proccess the result and show the convenient popup window
        }
 }).execute("my url" + uid);