Вопрос

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

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

Моя проблема в том, что я не знаю, как создать мою SQLite DB «THEDB» из класса Asynctasks

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

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

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

Конструктор THEDB является THEDB (контекст контекста), но этот класс не является «контекстом», так как я могу использовать мою БД здесь?

Пожалуйста, предоставьте примеры, если вы можете

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

Это было полезно?

Решение

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

this.db = new TheDB(getApplicationContext());

Другие советы

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(); 
    }
}

Есть два способа, которые я вижу:

  1. Передайте объект контекста на вашу Asynctask Constructor, затем инстанционная база данных, такая, это.

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

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

Как вы можете видеть в Документы Asynctask, здесь нет onCreate или onExecute Метод в АН AsyncTask.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top