在我的应用中,我使用...
myFilesDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
+ "/Android/data/" + packageName + "/files");
myFilesDir.mkdirs();
很好,最终的路径是...
/mnt/sdcard/Android/data/com.mycompany.myApp/files
我需要一个要存储在SD卡上的SQLite数据库,因此我按如下方式扩展了SQLiteOpenHelper ...
public class myDbHelper extends SQLiteOpenHelper {
public myDbHelper(Context context, String name, CursorFactory factory, int version) {
// NOTE I prefix the full path of my files directory to 'name'
super(context, myFilesDir + "/" + name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
// Create tables and populate with default data...
}
}
到目前为止一切顺利-我第一次打电话getReadableDatabase()或getWriteableDatabase()在SD卡上创建了一个空DB并将其onCreate()填充。
所以这就是问题所在-该应用程序可能需要5到6个人进行Beta测试,并且像我一样,他们正在运行Android v2.2,并且一切正常。我有一个测试器,但是正在运行v2.1,并且myDbHelper在首次使用时尝试创建数据库时,它因以下原因而崩溃...
E/AndroidRuntime( 3941): Caused by: java.lang.IllegalArgumentException: File /nand/Android/data/com.mycompany.myApp/files/myApp-DB.db3 contains a path separator
E/AndroidRuntime( 3941): at android.app.ApplicationContext.makeFilename(ApplicationContext.java:1445)
E/AndroidRuntime( 3941): at android.app.ApplicationContext.openOrCreateDatabase(ApplicationContext.java:473)
E/AndroidRuntime( 3941): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:193)
E/AndroidRuntime( 3941): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
E/AndroidRuntime( 3941): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:158)
文件目录的路径是一个奇数(“ / nand”),因为它是内部存储器,尽管不是手机自己的内部存储器-但这是getExternalStorageDirectory()此设备返回的路径。
我可以看到三个可能的答案...
尽管在v2.2上可以接受,但是不建议为数据库名称指定完全限定的路径,并且在早期版本中会失败
SD卡存储可接受完全限定的路径,但是“ / nand”路径被解释为“内部”路径,在这种情况下,仅相对路径可接受
我完全想不到的其他东西
如果上述任何一项或全部适用,那么如果有人可以帮助我解决这个问题,我将不胜感激。
谢谢。
撒科打诨
拉莫斯之舞
相关分类