#android #sqlite
#Android #sqlite
Вопрос:
У меня есть два класса, оба не являются activity, один предназначен для выполнения операции с базой данных, а другой — для пересылки значений в качестве класса-посредника. Класс базы данных вызывает метод openOrCreateDatabase из 3-го класса подключения.
contextWrapper.openOrCreateDatabase(sqlDBName, MODE_PRIVATE, null);
но здесь, поскольку этот класс не является activity, я не могу передать параметр ContextWrapper. Есть ли какой-либо другой способ открыть базу данных. Я пытался,
sqLiteDatabase = SQLiteDatabase.openDatabase(path, factory, flags);
sqLiteDatabase = SQLiteDatabase.openOrCreateDatabase(file, factory);
Но у меня это не работает.
Спасибо
Ответ №1:
Вы не можете создать базу данных без контекста. Это одна из тех вещей, для которых существует context: он позволяет вам получить доступ к общим настройкам, базе данных и так далее.
Комментарии:
1. спасибо за ответ Владимир. Есть ли какой-либо способ получить ContextWrapper ранее вызванного действия, в котором выполняются эти операции.
2. Что вы подразумеваете под ранее вызванным? В любом случае, вы вызываете код своей базы данных из ниоткуда. Вы вызываете его из activity или службы, поэтому у вас всегда есть контекст. Просто передайте ссылку на activity.
Ответ №2:
Да, есть способ. В конструкторе класса-оболочки db вы можете добавить ContextWrapper в качестве параметра и вызвать его, вот так:
public ctor(ContextWrapper wrapper) {
SQLiteDatabase db = wrapper.openOrCreateDatabase("myDB", wrapper.MODE_PRIVATE, null);
}