Ошибка OpenOrCreate () базы данных Android

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