3 回答

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
從歷史上看,您無法通過使用路徑SQLiteOpenHelper。它僅適用于簡單的文件名。我沒有意識到他們放寬了Android 2.2中的限制。
如果您希望使用SD卡上的數(shù)據(jù)庫,并且希望支持Android 2.1及更低版本,則不能使用SQLiteOpenHelper。

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊
k3b的答案很棒。它使我工作。但是,在使用API級別11或更高版本的設(shè)備上,您可能會看到它停止工作。這是因?yàn)樘砑恿诵掳姹镜膐penOrCreateDatabase()方法?,F(xiàn)在,它包含以下簽名:
openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags, DatabaseErrorHandler errorHandler)
在某些具有此方法的設(shè)備上,這似乎是默認(rèn)調(diào)用的方法。
為了使此方法在這些設(shè)備上起作用,您需要進(jìn)行以下更改:
首先,編輯您現(xiàn)有的方法,使其僅將調(diào)用結(jié)果返回給新方法。
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode,
CursorFactory factory) {
return openOrCreateDatabase(name, mode, factory, null);
}
其次,使用以下代碼添加新的替代。
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory, DatabaseErrorHandler errorHandler) {
SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name).getAbsolutePath(),null,errorHandler);
return result;
}
該代碼與k3b的代碼非常相似,但是請注意,SQLiteDatabase.openOrCreateDatabase采用String而不是File,并且我使用了允許DatabaseErrorHandler對象的版本。
- 3 回答
- 0 關(guān)注
- 690 瀏覽
添加回答
舉報(bào)