大家好,我有一个异步任务,我从网上获得积分,根据这些点,我必须决定我应该在主线程上显示哪个弹出窗口。例如,如果积分较少,我应该显示“购买积分”屏幕,否则显示“购买项目”屏幕。我还想显示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并停止执行主线程?
答案 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);