Заполнение ListView с помощью AsyncTask (doInBackground(), возвращающий курсор)

Я пытаюсь заполнить свой ListView с помощью AsyncTask. Включенная проблема в комментарии

private class DownloadDataTask extends AsyncTask<String, Void, Cursor> {
    private final ProgressDialog dialog = new ProgressDialog(ctx);


    @Override
    protected void onPreExecute() {
        this.dialog.setMessage(ctx.getString(R.string.AcquiringData));
        this.dialog.show();
    }


    @Override
    protected Cursor doInBackground(final String... args) {         

        DbAdapter dbAdapter = new DbAdapter(ctx);
        dbAdapter.open();
        // normally when I call this method from main class it reurns cursor full of values
        Cursor cursor = dbAdapter.fetchAllItemsInExpenses();

        return cursor;
    }


    protected void onPostExecute(final Cursor cursor) {
        if (this.dialog.isShowing()) {
            this.dialog.dismiss();
           //cursor is empty

    }

ctx Контекст, установленный в главном классе OnCreate()

Следующие запросы вставляют метод fetchAllItemsInExpenses():

public Cursor fetchAllItemsInExpenses() {
    String query = "SELECT ... " //(some terribly boring and long query string, but trust me, it works perfectly fine)
    return SQLDb.rawQuery(query, null);
}

1 ответ

Решение

Попробуйте это в AsyncTask...

private class DownloadDataTask extends AsyncTask<String, Void, Cursor> {
    private final ProgressDialog dialog = new ProgressDialog(ctx);
    Context ctx = null; //Add this and the constructor below

    public DownloadDataTask(Context context) {
        ctx = context;
    }

    ...

}

Тогда в вашем Activity создать и выполнить AsyncTask следующее...

DownloadDataTask ddt = new DownloadDataTask(this);
ddt.execute(theArgs);
Другие вопросы по тегам