2010-02-27 64 views
2

首先,我想簡要描述一下我的情況。調用Android的getSharedPreferences();來自SQLiteOpenHelper類

我有兩個類,一個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;   
    } 

我請從DataBaseHelper類checkCurrentDbVersion()方法,如下所示:

MainClass currentDbVersion = new MainClass(); 

    int oldDbVersion = currentDbVersion.checkCurrentDbVersion(); 

只要調試運行下面的行,它停止。

SharedPreferences settings = getSharedPreferences(PREFERENCES, 0); 

我在做什麼錯?我沒有定義構造函數。那可能是失敗嗎?

問候 Johe

回答

7

我發現了一個解決方案,我想份額。它可以在這裏找到:

Passing data through intents instead of constructors

我忘了方面(我現在還不能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); 
+0

謝謝,非常感謝你的問題/答案。我在一個已經有上下文的活動中調用了我的「getSharedPreferences」,但我必須添加「this」。到開始(荒謬)。 – Slobaum 2010-08-31 16:32:10

+0

很高興我能幫上忙。 – j7nn7k 2010-09-02 11:42:14