AsyncTask:doInBackground没有完成

时间:2018-01-13 12:56:57

标签: java android android-asynctask

我正在尝试在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。 在前端,我可以看到进度条旋转,但在后端我可以看到没有加载数据。

1 个答案:

答案 0 :(得分:0)

您的问题是您要覆盖错误的方法名称:) 它应该是

@Override
protected void onPostExecute(Void result) {
    // your code
}

在您的情况下,doInBackground返回的变量为Void

您可以查看有关AsyncTask

的文档