【问题标题】:Stop main thread and show progress dialog停止主线程并显示进度对话框
【发布时间】:2016-08-29 09:12:37
【问题描述】:

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

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

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

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

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

我的异步任务

 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 锁定 UI 就足够了
  • 我想停下来直到异步任务完成,这样我才能得到正确的分数并启动正确的弹出窗口
  • 为什么在关闭 pdia 后不在 pnPostExecute 中显示进度对话框?
  • 你不想停止主线程,否则你的应用程序将被关闭。您必须使用 onPostExecute 方法来显示新的进度对话框或查看 onProgressUpdate 方法。
  • 启动异步任务后,我检查主线程上的点的条件并启动弹出窗口,点加载异步任务大约需要 6-7 秒,所以我想等待这 6 个-7 秒,所以加载的点数是正确的,我想显示这 6-7 秒的进度对话框,还有其他方法吗?

标签: android android-asynctask progressdialog


【解决方案1】:

您应该创建一个新的interface,其中将包含一个回调方法,您将在postExecute 方法中调用此方法,并将返回的点数作为参数提供给它

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

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

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

之后在postExecute方法中调用JsonTaskCallBack$pointsPrecessing方法,之后使用这个语句:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多