Как использовать БД SQLite от AsyncTask? - PullRequest
7 голосов
/ 24 ноября 2010

Я использовал свой класс Activity для доступа к своей БД, что иногда приводило к зависанию моей программы.

Поэтому я решил вместо этого использовать AsyncTask для работы с БД.

Моя проблема в том, что я не знаю, как создать экземпляр моей базы данных SQLite "TheDB" из класса AsyncTask

public class myClass extends AsyncTask<Void, Void, Void>{
private TheDB db;

any method() {
    this.db = new TheDB(this);  //<-- Error here
}

это работало нормально на классе Activity, но я не знаю, как его использовать здесь

Конструктор TheDB - TheDB (контекстный контекст), но этот класс не является "контекстом", так как я могу использовать свою БД здесь?

приведите примеры, если можете

и, пожалуйста, не давайте мне ссылки на ссылки Google, я новичок, и мне трудно им следовать

Ответы [ 4 ]

9 голосов
/ 24 ноября 2010

здесь нужно передать контекст приложения

this.db = new TheDB(getApplicationContext());
6 голосов
/ 12 июля 2011
import android.content.Context;

public class SuperTask extends AsyncTask<Void, Void, Void> {
    private final Context mContext; 

    public SuperTask(Context context) {
        super();
        this.mContext = context
    }

    protected Void doInBackground(Void... params) {
        // using this.mContext
    }
}

public class MainActivity extends Activity {
    // and run from Activity
    public void onButtonClick(View view) {
        new SuperTask(this.getApplicationContext()).execute(); 
    }
}
0 голосов
/ 10 ноября 2015

Я вижу два способа:

  1. Передать объект контекста в ваш конструктор AsyncTask, а затем создать экземпляр такой базы данных this.db = new TheDB (context);

  2. Или, возможно, вы можете передать фактический объект базы данных в конструктор, но первый подход выглядит лучше.

0 голосов
/ 24 ноября 2010

Важной частью обучения программированию является обучение чтению и пониманию документации. Как следует из документации, документы по Android довольно подробны, поэтому вам стоит потратить время на то, чтобы понять, как они работают.

Как вы можете видеть в документах AsyncTask , в AsyncTask нет метода onCreate или onExecute.

Документы четко проведут вас через 4 основные функции AsyncTask, onPreExecute(), doInBackground(Params...), onProgressUpdate(Progress...), onPostExecute(Result).

Возможные варианты для вашего экземпляра: onPreExecute() или doInBackground(Params...). Разница в том, хотите ли вы, чтобы инициализация происходила в потоке пользовательского интерфейса. Если нет, то сделайте это за doInBackground(Params...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...