Проблемы с вызовом Android getSharedPreferences (); из класса SQLiteOpenHelper - PullRequest
3 голосов
/ 27 февраля 2010

Сначала я хочу кратко описать свою ситуацию.

У меня есть два класса, один MainClass и один класс DataBaseHelper, который расширяет SQLiteOpenHelper.

Из моего MainClass я вызываю метод в классе DataBaseHelper, чтобы открыть базу данных. Прежде чем открыть базу данных, я хочу проверить версию базы данных пользователей (это важно, как только я хочу обновить базу данных и отправить ее на рынок Android). Поэтому из класса DataBaseHelper я вызываю следующий метод, который находится в MainClass.

 public int checkCurrentDbVersion(){
        // Restore preferences
        SharedPreferences settings = getSharedPreferences(PREFERENCES, 0);
        int dbUpgradeVar = settings.getInt("dbUpgradeVar", 1);
        return dbUpgradeVar;        
    }

Я вызываю метод checkCurrentDbVersion () из класса DataBaseHelper следующим образом:

    MainClass currentDbVersion = new MainClass(); 

    int oldDbVersion = currentDbVersion.checkCurrentDbVersion();

Как только отладчик запускает следующую строку, он останавливается.

SharedPreferences settings = getSharedPreferences(PREFERENCES, 0);

Что я делаю не так? У меня нет определенного конструктора. Может ли это быть неудачей?

С наилучшими пожеланиями Johe

1 Ответ

9 голосов
/ 27 февраля 2010

Я нашел решение, которым хочу поделиться. Его можно найти здесь:

Передача данных через намерения вместо конструкторов

Я забыл контекст (я все еще не уверен на 100%, что такое контекст, но в любом случае ...).

Итак, чтобы заставить код работать, я изменил его так:

 public int checkCurrentDbVersion(Context context){
        // Restore preferences
        SharedPreferences settings = context.getSharedPreferences(PREFERENCES, 0);
        int dbUpgradeVar = settings.getInt("dbUpgradeVar", 1);
        return dbUpgradeVar;        
    }

Вызовите метод

private final Context myContext;

/*
*do some other stuff here
*/

    MainClass currentDbVersion = new MainClass(); 

    int oldDbVersion = currentDbVersion.checkCurrentDbVersion(myContext);
...