我正在尝试在Android中实现一个AsyncTask,它将从数据库加载我的所有数据。因此,我使用onPreExecute
方法启动ProgressDialog
public class DataLoader extends AsyncTask<Void, Void, Void> {
private LoginActivity activity;
private ProgressDialog nDialog;
public DataLoader (LoginActivity act){
this.activity = act;
nDialog = new ProgressDialog(activity);
}
protected void onPreExecute() {
System.out.print("Start AsyncTask");
nDialog.setMessage("Loading data..");
nDialog.setTitle("Starting the application");
nDialog.setIndeterminate(false);
nDialog.setCancelable(true);
nDialog.show();
}
@Override
protected Void doInBackground(Void ... params) {
System.out.println("Starting doInBackground");
loadDashboardData();
return null;
}
protected void onPostExecute() {
nDialog.dismiss();
Intent i = new Intent();
i.setClass(activity.getApplicationContext(), DashboardActivity.class);
activity.startActivity(i);
}
我使用doInBackground
方法加载调用函数来加载数据。从可见活动调用此方法。该任务通过以下方式调用:
public class LoginActivity extends Activity {
public void onClick(View v) {
DataLoader dl = new DataLoader(this);
dl.execute();
}
}
doInBackground
的代码是:
protected Void doInBackground(Void ... params) {
System.out.println("Starting doInBackground");
loadDashboardData();
return null;
}
现在的问题是我的doInBackground
方法无法完成。我尝试在loadDashboardData()
方法中实施onPreExecute
调用。这不会显示我的对话框,但会正确加载数据。在这种情况下,UI线程没有响应,并将在加载所有数据后进行响应。
什么会妨碍doInBackground
方法正确执行并正确加载数据?被调用的方法有效(因为我可以调用它并获取正确的数据)。我也没有在运行控制台中看到println
。
在前端,我可以看到进度条旋转,但在后端我可以看到没有加载数据。
答案 0 :(得分:0)
您的问题是您要覆盖错误的方法名称:) 它应该是
@Override
protected void onPostExecute(Void result) {
// your code
}
在您的情况下,doInBackground
返回的变量为Void
。
您可以查看有关AsyncTask。
的文档