http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0330/4108.html
我在使用Greendao的时候,遇到的这个问题。
在BaseApplication中:
public static DaoMaster getDaoMaster(Context context) {
String userId = SharedPreUtil.getInstance().getValue("USER_ID");
if (daoMaster == null) {
DB_NAME = userId + DB_NAME;
OpenHelper helper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);
daoMaster = new DaoMaster(helper.getWritableDatabase());
}
return daoMaster;
}
我创建数据库使用的是 DevOpenHelper。DevOpenHelper是在DaoMaster中定义的,在那我们重写getReadableDatabase().
public static class DevOpenHelper extends OpenHelper {
private static boolean mainTmpDirSet = false;
public DevOpenHelper(Context context, String name, CursorFactory factory) {
super(context, name, factory);
}
/**
* BUG:SQLiteCantOpenDatabaseException: unable to open database file (code 14)
*
* @return
*/
@Override
public SQLiteDatabase getReadableDatabase() {
if (!mainTmpDirSet) {
boolean rs = new File("/data/data/your packager/databases/main").mkdir();
super.getReadableDatabase().execSQL("PRAGMA temp_store_directory='/data/data/com.mar.ui/databases/main'");
mainTmpDirSet = true;
return super.getReadableDatabase();
}
return super.getReadableDatabase();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
UPDatedb.getInstance().updataData(db, oldVersion, newVersion);
/*dropAllTables(db, true);
onCreate(db);*/
}
}