2016-03-06 28 views
2

我正在尋找從另一個非活動類到openOrCreateDatabase的方法,並且我發現的所有教程和SO問題都與此相反。爲什麼SQLite處理必須發生在活動或服務類上?

爲什麼?

方法openOrCreateDatabase只能從服務或活動中調用,或者我可以將其稱爲靜態方法SQLiteDatabase.openOrCreateDatabase

但是,此方法的第二個參數需要CursorFactory,在大多數教程中它是:MODE_PRIVATE。我無法使用來自非活動類的MODE_PRIVATE。有些人建議使用context.MODE_PRIVATE,但我想避免從我想使用數據庫的每個活動傳遞context這樣的依賴。

在所有活動中,一個類中只有一個數據庫連接和數據庫處理的最佳方式是什麼?

+0

MODE_PRIVATE是一個靜態最終字段 – pskink

+0

然後你將如何訪問它? –

+0

像任何靜態字段:'ClassName.STATIC_FIELD' – pskink

回答

2

您是否通過singleton訪問您的SQLiteDatabase

private static DatabaseHelper sInstance = null; 

public static synchronized DatabaseHelper getInstance(Context context) { 

    if (sInstance == null) { 
     sInstance = new DatabaseHelper(context.getApplicationContext()); 
    } 
    return sInstance; 
} 

private DatabaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

如果是這樣的話,上面還需要一個Context的說法,但如果你不願意通過一個圍繞,那麼你可以使用這個technique

public class App extends Application { 

    private static App instance; 

    public static App get() { 
     return instance; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     instance = this; 
    } 
} 

所以,你可以使用訪問您的數據庫DatabaseHelper.getInstance(App.get());

+0

這就是我決定在幾分鐘前使用,很好,謝謝:) –

相關問題