Как использовать SQLite DB от Asynctask?
-
27-09-2019 - |
Вопрос
Я использовал свой класс активности для доступа к моей БД, который иногда замораживал мою программу.
Поэтому я решил вместо этого использовать 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();
}
}
Есть два способа, которые я вижу:
Передайте объект контекста на вашу Asynctask Constructor, затем инстанционная база данных, такая, это.
Или вы, вероятно, можете передавать фактическую доступ к базе данных к конструктору, но первый подход кажется лучше.
Важной частью обучения к программе учится читать и понимать документацию. Поскольку документация идет, документы Android довольно подробно, поэтому его действительно стоит того, чтобы понять, как они работают.
Как вы можете видеть в Документы Asynctask, здесь нет onCreate
или onExecute
Метод в АН AsyncTask
.
Документы четко прогуляются через 4 основных функция асинктка, onPreExecute()
, doInBackground(Params...)
, onProgressUpdate(Progress...)
, onPostExecute(Result)
.
Вероятный выбор для вашего экземпляра onPreExecute()
или doInBackground(Params...)
. Отказ Разница заключается в том, хотите ли вы, чтобы инициализация произошла в потоке пользовательской интерфейсы. Если вы этого не сделаете, то сделайте это в doInBackground(Params...)
.