它绝对有效,因为postData发送到我的网站并转发它正在做的电子邮件。但是loadDialog没有执行(可能是但这是一个非常快速的过程)。 senddialog的最后一个进程没有执行,因为它会显示一个新的对话框,说明已发送但未发生。 我有这个异步的脚本
protected class sendReport extends AsyncTask<Void, Void, Void> {
protected void onProgressUpdate() {
progressdialog();
}
protected void onPostExecute() {
sentdialog();
loadingDialog.dismiss();
}
@Override
protected Void doInBackground(Void... arg0) {
postData();
publishProgress();
return null;
}
}
以下是发送的对话框脚本。
public void sentdialog(){
//set up dialog
final Dialog sentdialog = new Dialog(context);
sentdialog.setContentView(R.layout.sentdialog);
sentdialog.setTitle("Sent");
sentdialog.setCancelable(true);
final Button button = (Button) sentdialog.findViewById(R.id.Button01);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
sentdialog.dismiss();
}
});
sentdialog.show();
}
答案 0 :(得分:2)
编辑:您可以使用给定活动Main的处理程序执行此操作:
首先为每个活动创建一个处理程序:
private ProgressDialog progress;
private Handler myHandler= new Handler(){
@Override
public void handleMessage(Message msg){
switch(msg.what){
case 0:
progress.dismiss();
sentDialog();
break;
default:
super.handleMessage(msg);
break;
}
}
};
我写了你的progressDialog,postData,sentDialog方法:
private ProgressDialog progressDialog() {
progress= new ProgressDialog(this);
progress.setIndeterminate(true);
progress.setMessage("I am thinking");
return progress;
}
private String postData() {
try{
Thread.sleep(1000);
}
catch(Exception e){;}
Log.d(TAG,"postData");
return "done";
}
private void sentDialog() {
Toast.makeText(Main.this,"Sent", Toast.LENGTH_SHORT).show();
}
并在onclick中调用:
// DISPLAY ON CLICK HANDLER
displayButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
progressDialog().show();
Thread thread= new Thread( new Runnable() {
public void run() {
postData();
myHandler.sendEmptyMessage(0);
}
});
thread.setDaemon(true);
thread.start();
}
});