2016-08-29 30 views
0

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

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

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

如果我这样做进度对话框显示,但加载点是错误的

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

我异步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并停止执行主线程,直到异步任务完成?

+0

?你不应该..用ProgressDialog锁定UI已经足够 – lubilis

+0

我想停止,直到异步任务完成,这样我就可以得到正确的点并启动正确的弹出窗口 – Redman

+0

为什么在解除pdia之后,你不在pnPostExecute中显示进度对话框? – Elltz

回答

1

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

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

现在你应该创建一个新的属性从interface中的JsonTask类中添加新的构造函数,该构造函数的参数为​​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);