Java 为什么我的对话永远不会结束?
在我的Android项目中,我有一个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
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();
}
}