3 回答
![?](http://img1.sycdn.imooc.com/54584e2c00010a2c02200220-100-100.jpg)
TA贡献1934条经验 获得超2个赞
从历史上看,您无法通过使用路径SQLiteOpenHelper。它仅适用于简单的文件名。我没有意识到他们放宽了Android 2.2中的限制。
如果您希望使用SD卡上的数据库,并且希望支持Android 2.1及更低版本,则不能使用SQLiteOpenHelper。
![?](http://img1.sycdn.imooc.com/5458506b0001de5502200220-100-100.jpg)
TA贡献1820条经验 获得超10个赞
k3b的答案很棒。它使我工作。但是,在使用API级别11或更高版本的设备上,您可能会看到它停止工作。这是因为添加了新版本的openOrCreateDatabase()方法。现在,它包含以下签名:
openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags, DatabaseErrorHandler errorHandler)
在某些具有此方法的设备上,这似乎是默认调用的方法。
为了使此方法在这些设备上起作用,您需要进行以下更改:
首先,编辑您现有的方法,使其仅将调用结果返回给新方法。
@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 关注
- 676 浏览
添加回答
举报