greendao出现Failed to change locale for db ‘/data/data/xxx/databases/xxx.db‘ to ‘zh_CN‘.

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());

注:仅供参考,后续测试没出现该问题,但是由于是偶发现象,所以不确定是否解决问题了!!!!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值