问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

DbUtils应用在Android6.0中为什么会崩溃

发布网友 发布时间:2023-03-11 03:26

我来回答

1个回答

热心网友 时间:2023-10-14 06:11

首先了解一下DbUtils的框架结构,总体来看分为7个部分: 1、create instance(创建实例) 2、operations(操作部分) 3、config(配置) 4、private operations with out transaction(无业务的操作) 5、tools(工具) 6、exec sql(sql执行) 7、temp cache(临时缓存)

其中在创建数据库的时候提供了5种构造方法

(1)通过传入上下文创建DB,这种情况下使用的是系统默认的配置

dbName = xUtils.db, dbVersion = 1;
public static DbUtils create(Context context) {
DaoConfig config = new DaoConfig(context);
return getInstance(config);
}

(2)通过传入上下文和dbName,根据用户指定的dbName生成数据库

public static DbUtils create(Context context, String dbName) {
DaoConfig config = new DaoConfig(context);
config.setDbName(dbName);
return getInstance(config);
}

(3) 通过传入上下文 、dbDir、dbName,根据用户指定的dbName在dbDir位置生成数据库 public static DbUtils create(Context context, String dbDir, String dbName) {

DaoConfig config = new DaoConfig(context);
config.setDbDir(dbDir);
config.setDbName(dbName);
return getInstance(config);
}

(4) 通过传入上下文 、dbName,dbVersion、dbUpgradeListener根据用户指定的dbName生成dbVersion版 的数据库 public static DbUtils create(Context context, String dbName, int dbVersion, DbUpgradeListener dbUpgradeListener) {

DaoConfig config = new DaoConfig(context);
config.setDbName(dbName);
config.setDbVersion(dbVersion);
config.setDbUpgradeListener(dbUpgradeListener);
return getInstance(config);
}

(5) 通过传入上下文 、dbName,dbVersion、dbUpgradeListener,根据用户指定的dbName生成dbVersion的数据库 ,指定* public static DbUtils create(Context context, String dbDir, String dbName, int dbVersion, DbUpgradeListener dbUpgradeListener) {

DaoConfig config = new DaoConfig(context);
config.setDbDir(dbDir);
config.setDbName(dbName);
config.setDbVersion(dbVersion);
config.setDbUpgradeListener(dbUpgradeListener);
return getInstance(config);
}

5种方法怎么选择呢?我们看下用于配置数据库的5个属性

private Context context; //上下文
private String dbDir;//数据库存储路径
private String dbName = “xUtils.db”; // 数据库名称
private int dbVersion = 1; //版本号
private DbUpgradeListener dbUpgradeListener;//*

为了方便我们后期查找,一般会选择第三种构造方法,指定上下文,指定数据库的名称,指定数据库存储路径,大多数情况这是没有问题的,但是Android6.0和以前的版本相比,对存储路径做了修改,所以根据Android4.X/5.X给出的指定存储路径不适用于6.0版本,创建数据库失败,就出现的文章开头的错误,获取数据库版本号失败。

找到了问题所在,那么解决起来就相对简单了,只要选择第一种构造方法,指定上下文,其他属性根据系统自动适配就可以了。

其实还有一种相对简单的解决方法,作为手机端,大部分数据都是从服务器获取的,在数据量不是很大的情况下,并不需要去生成数据库,可以在获取数据后,只做一个简单的缓存,保存到集合中,如List,map等,大多数页面现在都是这样实现的。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
“泛览周王传”的出处是哪里 避事的意思是什么 怠息的意思是什么 “偷闲来此一嚬呻”的出处是哪里 怠息意思和来源是什么 客厅中间沙发旁旁边放什么 客厅沙发旁边放什么合适 沙发左右摆什么位置 淘宝网无法注册邮箱验证 谁能帮我注册一个谷歌帐号,我一直注册不成功,淘宝上也买不到,在线等... 活虾怎么放第二天不会死还是活的 请问有他山之石这个词语么 秀玉初实,宜待凤凰^^^后几句是什么? 秀玉初实,宜待凤凰^^^ 久泄髓枯上一句 智能手机怎么删除没用的号码? 后之为人君者不然,以为天下利害之权皆出于我,我以天下之利尽归于己……向使无君,人各得自私也。翻译 宁教我负天下人下一句是什么? “宁可我负天下人,勿使天下人负我”这句话是谁说的? 好心做了驴肝肺是什么意思 我是一片好心你却当成恶意的俗语是什么? 自古多情伤离别的意思 佳能5D Mark II如何显示网格线 男人戴什么可以辟邪招财 男人忌讳佩戴的物品 男人戴什么可以辟邪招财呢转运辟邪戴什么最好男士 文娱的拼音 描写小娃的古诗 缓一缓是什么意思? 乙肝患者的口水进去你嘴巴里了会传染吗? 宜春市石宝村陈林芳在瑞昌开艾灸馆怎么样 八大体院最新排名 梦见已故的父亲被请回家 派息比率又叫什么在哪里可以查到 自体脂肪填胸可以保持多久 什么心什么念四字成语 华为mate50pro特殊访问权限什么意思 哪个银行有nba联名卡? 梦见亲人掉水了 梦见亲人跌入水中 梦见亲人大哥掉水 百日宴邀请短信大全 江西遂川县县城多少人口 遂川县的介绍 六月香豆瓣酱可以蘸馍和拌米饭吃吗? 开封之后怎么保存 鸟鸣涧全诗的翻译? 六月香豆瓣酱是否可以直接拌面 小说怎样才能拷贝 怎么吃手机? 如何把整部手机的好吃,又对身体没危害 我的手机手机版怎么吃