Failed to change locale for db '/data/data/xxx/databases/xxx.db' to 'zh_CN'..属于数据库的错误。可能在低版本的手机上有些系统不兼容。
网上解决方案基本大同小异,在打开db的时候,添加一个新的flag就可以解决因为切换Locale导致的db异常:
但是当前使用的是greendao 。在研究他的api的过程中,发现系统自带一个 类
com.android.launcher3.util.NoLocaleSQLiteHelper
但是没法直接用,于是代码拷出来继承
DaoMaster.DevOpenHelper
自定义MyOpenHelper
public class MyOpenHelper extends DaoMaster.DevOpenHelper {
private static final boolean ATLEAST_P =
Build.VERSION.SDK_INT >= Build.VERSION_CODES.P;
public MyOpenHelper(Context context, String name) {
super(ATLEAST_P ? context : new NoLocalContext(context), name);
if (ATLEAST_P) {
setOpenParams(new SQLiteDatabase.OpenParams.Builder().addOpenFlags(NO_LOCALIZED_COLLATORS).build());
}
}
private static class NoLocalContext extends ContextWrapper {
public NoLocalContext(Context base) {
super(base);
}
@Override
public SQLiteDatabase openOrCreateDatabase(
String name, int mode, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) {
return super.openOrCreateDatabase(
name, mode | Context.MODE_NO_LOCALIZED_COLLATORS, factory, errorHandler);
}
}
}
然后直接调用:
MyOpenHelper mDevOpenHelper = new MyOpenHelper(context.getApplicationContext(), getDbName());
DaoMaster mDaoMaster = new DaoMaster(mDevOpenHelper.getReadableDatabase());
注:仅供参考,后续测试没出现该问题,但是由于是偶发现象,所以不确定是否解决问题了!!!!!!