SQLiteAssetHelper - 特定手机上的问题,例如万普拉斯

时间:2015-12-03 14:13:51

标签: android sqlite oneplusone

在我的应用中使用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;

2 个答案:

答案 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;
}