【发布时间】:2015-08-28 20:17:42
【问题描述】:
我的 Android 项目中有一个 MainActivity 类。在其中,我有一个AsyncTask 来检索有关我的Cars 的所有信息,并使用我的API REST 的GET 方法,我想将它们添加到我的MainActivity 类中的一个ArrayList 中。因此,我想添加一个在我的 AsyncTask 完成的同时完成的 ProgressDialog。
我已经在我的 MainActivity 顶部声明了我的 ProgressDialog:
private ProgressDialog progressDialog;
还有,我的ArrayList 的汽车定义在我的MainActivity 的顶部:
ArrayList<Car> cars = new ArrayList<Car>(); //This is the ArrayList that I have on my MainActivity class
然后,我运行我的AsyncTask 并在我的MainActivity 类的onCreate 方法中初始化我的ProgressDialog:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage("Loading...");
progressDialog.setCancelable(true);
progressDialog.setMax(100);
new chargeCars().execute();
}
这是我的 AsyncTask:
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();
}
}
问题在于ProgressDialog 永远不会结束,它总是在屏幕上。为什么总是显示?我的 AsyncTask 是否一直在运行?永无止境?
注意:我的 HTTP 响应信息来自我的 API REST,因为我在检索信息后放置了一些日志,并且它是正确的,显然它存储在 ArrayList (在将信息添加到我的 ArrayList 之后,我也放了一些日志,它给了我存储的信息)但是当我在 AsyncTask 上执行 cars.size() 后将 cars.size() 放在 onCreate() 方法上时,它给了我它等于的大小到 0。这就是我将 ProgressDialog 放在 AsyncTask 中的原因,因为我认为它可能还没有完成,然后我确信 AsyncTask 已经完成。这可能是解决方案吗?我需要再做一次改变吗?
请给我点灯,因为我完全被这里挡住了。
编辑:我编辑了我的代码。
EIDT 2: 更新代码后,ProgressDialog 仅在我触摸手机屏幕时才会消失。在其他情况下,它不会消失。
提前致谢!
【问题讨论】:
标签: java android arraylist android-asynctask progressdialog