Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.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_Arraylist_Android Asynctask_Progressdialog - Fatal编程技术网

Java 为什么我的对话永远不会结束?

Java 为什么我的对话永远不会结束?,java,android,arraylist,android-asynctask,progressdialog,Java,Android,Arraylist,Android Asynctask,Progressdialog,在我的Android项目中,我有一个MainActivity类。在它里面,我有一个AsyncTask,用API REST的GET方法检索有关Cars的所有信息,我想将它们添加到MainActivity类中的ArrayList中。因此,我想添加一个ProgressDialog,该对话框在异步任务完成的同时完成 我已在主要活动顶部声明了我的ProgressDialog: private ProgressDialog progressDialog; 此外,我的ArrayList汽车列表在我的main

在我的Android项目中,我有一个
MainActivity
类。在它里面,我有一个
AsyncTask
,用API REST的
GET
方法检索有关
Cars
的所有信息,我想将它们添加到
MainActivity
类中的ArrayList中。因此,我想添加一个
ProgressDialog
,该对话框在异步任务完成的同时完成

我已在主要活动顶部声明了我的ProgressDialog:

private ProgressDialog progressDialog;
此外,我的
ArrayList
汽车列表在我的
main活动的顶部定义:

ArrayList<Car> cars = new ArrayList<Car>(); //This is the ArrayList that I have on my MainActivity class
这是我的任务:

class chargeCars extends AsyncTask<Void, Integer, Boolean> {

    protected void onPreExecute(){
        progressDialog.setProgress(0);
        progressDialog.show();
    }

    protected Boolean doInBackground(Void... params) {

        //Here all the code to get my information from an HTTP Response, the data it's retrieving OK.

           //Here there is a for loop to add all the elements to my ArrayList cars.
            {
                cars.add(new Car(idCar, model));

                publishProgress(10);

                if(isCancelled())
                    break;
            }

        publishProgress(100);
        return true;
    }

    protected void onProgressUpdate(Integer... values){
        int progress = values[0].intValue();

        progressDialog.setProgress(progress);
    }

    protected void onPostExecute(boolean c){

        if(c)
        {
            Toast.makeText(MainActivity.this, "Finished task!",
                    Toast.LENGTH_SHORT).show();
        }

        if(progressDialog != null && progressDialog.isShowing()){
            progressDialog.dismiss();
        }
    }

    protected void onCancelled() {
        Toast.makeText(MainActivity.this, "Canceled task",
                Toast.LENGTH_SHORT).show();
    }
}
class chargeCars扩展异步任务{
受保护的void onPreExecute(){
progressDialog.setProgress(0);
progressDialog.show();
}
受保护的布尔doInBackground(Void…params){
//这里是从HTTP响应获取信息的所有代码,它正在检索的数据正常。
//这里有一个for循环,用于将所有元素添加到我的ArrayList中。
{
添加(新车(idCar,model));
出版进度(10);
如果(isCancelled())
打破
}
出版进度(100);
返回true;
}
受保护的void onProgressUpdate(整型…值){
int progress=values[0]。intValue();
progressDialog.setProgress(progress);
}
受保护的void onPostExecute(布尔c){
如果(c)
{
Toast.makeText(MainActivity.this,“已完成任务!”,
吐司。长度(短)。show();
}
if(progressDialog!=null&&progressDialog.isShowing()){
progressDialog.disclose();
}
}
受保护的void onCancelled(){
Toast.makeText(MainActivity.this,“已取消任务”,
吐司。长度(短)。show();
}
}
问题是,
ProgressDialog
永远不会结束,它总是在屏幕上。为什么它总是显示?我的异步任务总是在运行吗?永无止境

注意:我的HTTP响应的信息它来自我的API REST,因为我在检索到信息后放了一些日志,这些日志是正确的,显然它存储在
ArrayList
中(我在将信息添加到
ArrayList
后也放了一些日志,它给了我存储的信息)但是,当我在
onCreate()
方法上执行
AsyncTask
后放入
cars.size()
时,它给我的大小等于0。这就是我把我的
ProgressDialog
放在我的
AsyncTask
里面的原因,因为我认为它可能还没有完成,然后我确信AsyncTask已经完成了。这可能是解决办法吗?我必须再做一次改变吗

请给我点灯,因为我完全被挡住了

编辑:我编辑了我的代码

EIDT 2:代码更新后,只有当我触摸手机屏幕时,ProgressDialog才会消失。在其他情况下,它不会消失


提前谢谢

在onPostExecute添加中

if(progressDialog != null && progressDialog.isShowing()){
        progressDialog.dismiss();
    }
用这个方法

  @override
   protected void onPostExecute(boolean c){

            if(c)
            {
                Toast.makeText(MainActivity.this, "Finished task!",
                        Toast.LENGTH_SHORT).show();
            }
           if(progressDialog != null && progressDialog.isShowing()){
                 progressDialog.dismiss();
           }
        }
解雇()

在API级别1中添加,关闭此对话框,将其从屏幕上删除。 可以从任何线程安全地调用此方法。注意你 当对话框打开时,不应替代此方法进行清理 已驳回,改为在onStop()中实现


问题是
AsyncTask
中的方法
onPause
onDestroy
不会重写类中的任何内容,因此永远不会调用它们。如果在
AsyncTask
完成时需要执行某些操作,可以将其放入方法
onPostExecute
(在UI线程上运行)。您应该删除这两个方法(因为它们是无用的),并按如下方式设置onPostExecute方法:

protected void onPostExecute(boolean c){
    if(c) {
        Toast.makeText(MainActivity.this, "Finished task!",
                Toast.LENGTH_SHORT).show();
    }

    if(progressDialog != null && progressDialog.isShowing()){
        progressDialog.dismiss();
    }
}

有关
AsyncTask

中可用的方法,请参阅。它也一直在执行,永不停止。为什么会这样?我加了一句,就像Jayesh Elamgodil对我说的那样,但它也不起作用。有什么问题吗?嘿!我认为您缺少异步任务methid的@override。使用@override与不使用@override有什么区别?我有一些疑问。当你说
不要覆盖任何东西时,你的确切意思是什么。这是什么意思?(如果这是一个令人生厌的问题,请道歉)。另一个疑问是,在此之前我运行了另一个AsyncTask,它在CustomAdapter上设置值,并在列表中显示值。以前(使用onPause和onDestroy方法)它不显示,现在显示。但是ProgressDialog仍然显示,并且第二个异步任务的信息没有显示。第一个异步任务是否可能阻止第二个异步任务?非常感谢。
protected void onPostExecute(boolean c){
    if(c) {
        Toast.makeText(MainActivity.this, "Finished task!",
                Toast.LENGTH_SHORT).show();
    }

    if(progressDialog != null && progressDialog.isShowing()){
        progressDialog.dismiss();
    }
}