Java 警报对话框不显示
我有一个名为JsonHandler的类,它带有异步任务,用于连接到api并获取json内容。它在某些活动中使用,但我无法显示警报对话框“正在加载…请稍候”您能帮我吗Java 警报对话框不显示,java,android,json,asynchronous,Java,Android,Json,Asynchronous,我有一个名为JsonHandler的类,它带有异步任务,用于连接到api并获取json内容。它在某些活动中使用,但我无法显示警报对话框“正在加载…请稍候”您能帮我吗 公共类JsonHandler扩展了异步任务{ 语境; 警报对话框警报对话框; JsonHandler(上下文) { this.context=上下文; } @凌驾 受保护的void onPreExecute() { super.onPreExecute(); alertDialog=新建alertDialog.Builder(con
公共类JsonHandler扩展了异步任务{
语境;
警报对话框警报对话框;
JsonHandler(上下文)
{
this.context=上下文;
}
@凌驾
受保护的void onPreExecute()
{
super.onPreExecute();
alertDialog=新建alertDialog.Builder(context.create();
alertDialog.setTitle(“等待”);
alertDialog.setCanceledOnTouchOutside(false);
setMessage(“正在加载,请稍候…”);
alertDialog.show();
}
@凌驾
受保护的字符串doInBackground(字符串…URL){
//在这里,程序正在连接到api并返回所需的字符串
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
alertDialog.disclose();
//Toast.makeText(上下文,“更新成功”,Toast.LENGTH_SHORT).show();
}
在主要活动中:
jsonResponse=newjsonhandler(此)
.execute(“allowedVersion”).get();
当我在onPostExecute中使用alertDialog.show()时,它会显示出来,但是太晚了。
alertDialog
是前台的东西,所以不能在asynctask
的后台方法中执行。请这样做
private class JsonHandler extends AsyncTask<String, Void, String> {
AlertDialog alertDialog;
protected void onPreExecute() {
super.onPreExecute();
alertDialog = new AlertDialog.Builder(YourClasss.this);
}
@Override
protected String doInBackground(Void... params){
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
alertDialog.setTitle("The Process");
alertDialog.setIcon(R.drawable.success);
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setMessage("All done!");
alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent A = new Intent(DownloadActivity.this, Menu_activity.class);
startActivity(A);
finish();
}
});
alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
Intent A = new Intent(DownloadActivity.this, Menu_activity.class);
startActivity(A);
finish();
}
});
alertDialog.show();
}
}
私有类JsonHandler扩展了异步任务{
警报对话框警报对话框;
受保护的void onPreExecute(){
super.onPreExecute();
alertDialog=新建alertDialog.Builder(YourClasss.this);
}
@凌驾
受保护字符串doInBackground(Void…params){
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
alertDialog.setTitle(“流程”);
alertDialog.setIcon(R.drawable.success);
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setMessage(“全部完成!”);
alertDialog.setButton(alertDialog.BUTTON_中性,“确定”,
新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
意图A=新意图(下载activity.this,菜单\活动.class);
星触觉(A);
完成();
}
});
alertDialog.setOnDismissListener(新的DialogInterface.OnDismissListener(){
@凌驾
公共void onDismiss(对话框接口对话框){
意图A=新意图(下载activity.this,菜单\活动.class);
星触觉(A);
完成();
}
});
alertDialog.show();
}
}
好吧,我想出来了
我使用everywhere从AsyncTask.get()获取数据,但这个GUI被冻结了一会儿,AlertDialog无法显示
我找到的最佳解决方案是使接口从AsyncTask获取数据。但当我在PostExecute中执行时,它将在DoInBackground完成时显示。是否有任何方法可以在DoInBackground开始之前显示ProgressDialog或AlertDialog之类的内容?只需使用AlertDialog.Disclose在后台关闭它。您可以尝试t按照他的方法,将alert对话框设置为全局变量,将alertdialog代码添加到onCreate,然后在onPreExecute中使用alertdialog.show();然后在onPostExecuteMike中使用alertdialog.disease();在onPostExecuteMike中,如果我将注释disease,它将显示,但我仍然认为它不能正常工作。当我点击按钮[检查]与alertDialog相比,我几乎看不到冻结。我认为这太晚了:/。在doInBackground中,我使用的是URLConnection,可能这会产生问题?当doInBackground完成时,onPreExecute看起来可以工作:/