在我的应用中使用SQLiteAssetHelper时,我在某些设备上遇到崩溃,最重要的是在OnePlus设备上。现在我读了here它与数据库存储目录有关。
现在我试图找到一种解决方法,我现在能想到的最好的是像这样的构造函数
public MySubclass(Context context) {
super(context, databaseName, context.getFilesDir() + "/databases", null, databaseVersion);
这是正确的方法,还是这种方法存在其他问题?
修改
例外是
Fatal Exception: android.database.sqlite.SQLiteException: Can't upgrade read-only database from version x to y: /data/data/my.package.id/databases/database.db
抱歉,我将错误的SO问题联系起来:this is the correct one。在那里它说'OnePlus能够将数据库复制到/data/data/package-name/databases/filename.db,但它不允许访问该数据,我对此没有任何线索。 #39;
答案 0 :(得分:2)
SQLiteAssetHelper构造函数允许您指定自己的数据库目标路径(该文件夹需要是可写的)。如果您没有指定任何默认情况下正在使用一个。请参阅Github回购中的摘录:
if (storageDirectory != null) {
mDatabasePath = storageDirectory;
} else {
mDatabasePath = context.getApplicationInfo().dataDir + "/databases";
}
答案 1 :(得分:2)
Hey you can copy database from one to another from below mentioned code.
public class MySQLiteHelper extends SQLiteOpenHelper implements DBConstants {
private static MySQLiteHelper mInstance = null;
private SQLiteDatabase myDataBase;
private static String DB_PATH = "";
public MySQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
try {
if (checkDataBase())
openDataBase();
else
myDataBase = this.getReadableDatabase();
} catch (Exception e) {
}
}
public static MySQLiteHelper instance(Context context) {
File outFile = context.getDatabasePath(DATABASE_NAME);
DB_PATH = outFile.getPath();
if (mInstance == null) {
mInstance = new MySQLiteHelper(context);
}
return mInstance;
}