我正在使用AsyncTask(我在我的主要活动中开始)来加载一些数据:
Context context = VehicleTabView.this;
ProgressDialog progressDialog = new ProgressDialog(context);
progressDialog.setMessage("Loading...");
new LoadingVehicles(context, progressDialog).execute(null, null, null);
这是AsyncClass:
package com.example.schedule_vehicles;
import com.example.utils.VehicleNames;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
// Showing a ProgressDialog once loading the list of vehicles is completed using an AsyncTask
public class LoadingVehicles extends AsyncTask<Void, Void, Void> {
Context context;
ProgressDialog progressDialog;
public LoadingVehicles(Context context, ProgressDialog progressDialog) {
this.context = context;
this.progressDialog = progressDialog;
}
@Override
protected void onPreExecute() {
progressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
new VehicleNames(context);
return null;
}
@Override
protected void onPostExecute(Void result) {
progressDialog.dismiss();
}
}
ProgressDialog未在屏幕上显示的问题。
我输入Log.d,看看程序是否经历了所有阶段 - onPreExecute,doInBackground,onPostExecute,它正在经历所有阶段并完成我需要的工作。 但 ProgressDialog未显示。我读了很多关于这个东西的信息,似乎PRE和POST执行是由主线程启动的,它被DOINBACKGROUND方法阻塞,这就是没有看到ProgressDialog的原因。我试图找到一些答案如何解决 - 但没有成功。
如果有人遇到此问题,请分享您的经验。非常感谢!
答案 0 :(得分:1)
您正在将ProgressDialog传递给Task,只是在启动AsyncTask之前show()它,而不是从AsyncTask中传递。
答案 1 :(得分:1)
尝试:
ProgressDialog progressDialog = new ProgressDialog([Activity Name].this);
如果这可以解决问题或者我会深入了解,请告诉我。
答案 2 :(得分:1)
您的代码对我来说很好。你对Asynctask的理解是正确的,你对它们的使用也是正确的。 我唯一能想到的是你必须确保你也在UI线程上调用execute()。从发布的代码中我无法说出你所处的背景。
确保你可以传入&#34;这个&#34;作为一个背景。这将告诉你你是否在UI线程上。
ProgressDialog progressDialog = new ProgressDialog(this);
答案 3 :(得分:1)
也许您错过了上下文。
ProgressDialog progressDialog = new ProgressDialog(this);
答案 4 :(得分:1)
通常在创建ProgressDialog时,使用静态方法ProgressDialog.show(context,title,message)。这将创建并显示消息,并返回对对话框的引用。
onPreExecute和onPostExecute在主线程上调用,并且不会被在另一个线程上运行的doInBackground阻止。在doInBackground之前调用onPreExecute,在之后调用onPostExecute。
以下是一些示例代码:
public static class InitializeTask extends MyAsyncTask<String, String, Response<Object>> {
private Activity activity;
private ProgressDialog dialog;
public InitializeTask(Activity activity) {
this.activity = activity;
}
@Override
protected void onPreExecute() {
dialog = ProgressDialog.show(activity, null, "Initializing...");
}
@Override
protected void onPostExecute(Response<Object> result) {
if (dialog != null && dialog.isShowing())
dialog.dismiss();
}
@Override
protected Response<Object> doInBackground(String... params) {
}
@Override
protected void attach(Activity context) {
this.activity = context;
dialog = ProgressDialog.show(context, null, "Initialize...");
}
@Override
protected void detach() {
if (dialog.isShowing())
dialog.dismiss();
activity = null;
}
}
附加和分离是我自己引用交叉方向更改的方法。