Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 警报对话框不显示_Java_Android_Json_Asynchronous - Fatal编程技术网

Java 警报对话框不显示

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的类,它带有异步任务,用于连接到api并获取json内容。它在某些活动中使用,但我无法显示警报对话框“正在加载…请稍候”您能帮我吗

公共类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看起来可以工作:/