2010-02-27 7 views
2

Je veux d'abord décrire brièvement ma situation.Problèmes appelant Android getSharedPreferences(); de la classe SQLiteOpenHelper

J'ai deux classes, une classe MainClass et une classe DataBaseHelper, qui étend SQLiteOpenHelper.

Depuis ma MainClass, j'appelle une méthode dans la classe DataBaseHelper pour ouvrir une base de données. Avant d'ouvrir la base de données je veux vérifier la version de base de données des utilisateurs (ceci est important dès que je veux mettre à jour la base de données et la pousser sur le marché Android). Donc, à partir de la classe DataBaseHelper, j'appelle la méthode suivante, qui est dans la MainClass.

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

J'appelle la méthode checkCurrentDbVersion() de la classe DataBaseHelper comme ceci:

MainClass currentDbVersion = new MainClass(); 

    int oldDbVersion = currentDbVersion.checkCurrentDbVersion(); 

Dès que le débogueur exécute la ligne suivante, il arrête.

SharedPreferences settings = getSharedPreferences(PREFERENCES, 0); 

Qu'est-ce que je fais mal? Je n'ai aucun constructeur défini. Cela pourrait-il être l'échec?

Cordialement Johe

Répondre

7

J'ai trouvé une solution, que je veux part. Il se trouve ici:

Passing data through intents instead of constructors

J'ai oublié le contexte (je ne suis toujours pas 100% sûr de ce que le contexte est tout au sujet, mais de toute façon ...).

Donc, pour obtenir le code de travail je l'ai changé comme ceci:

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

Appelez la méthode

private final Context myContext; 

/* 
*do some other stuff here 
*/ 

    MainClass currentDbVersion = new MainClass(); 

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

Merci, vraiment apprécié votre question/réponse. J'appelais mes «getSharedPreferences» à partir d'une activité qui avait déjà un contexte, mais je devais ajouter «this». au début (ridicule). – Slobaum

+0

content d'avoir pu aider. – j7nn7k

Questions connexes