Заполнение 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);