android 组件化 2018,Android GreenDao 在组件化项目中的一个问题 - 2018年7月5日21:15:14...

组件化项目使用GreenDao时注意的事项:

1.要在组件化中的基础库(domain层)创建实体类;

2.如果sycn之后不能生产Dao文件,使用 Android Studio 的Gradle插件重新build项目,如图:

6ea4288ed6161ea110716bfdca17801f.png

build之后就会生成 GreenDao的相关文件了。

3.GreenDao还有一个巨坑的地方,就是你的Bean里的主键不要命名为 “id” ,比如酱紫:

@IdprivateLong id;private String name;

然后根据 id 查询:

eed7aa767a9c76079444080875600529.png

出现异常:

android.database.sqlite.SQLiteException:

no such column: id (code 1): , while compiling: SELECT T."_id",T."NAME" FROM "USER" T where id between ? and ?at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)

at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:898)

at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:509)

at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)

从错误日志可以看出 GreenDao内部把 id 转成了 _id !!!所以说我们在建实体的时候要避免命名为 id,而是换用其他的 名称。

当然,在接口已经出好不便修改的情况下,有两种方案:

一是我们在做 查询的切记用 _id 去查,或是用GreenDao建表时生成的大写 ID 去查询;

二是用 Dao 中的 Properties.Id 去做查询

public static classProperties {public final static Property Id = new Property(0, String.class, "id", true, "ID");public final static Property TaskId = new Property(1, String.class, "taskId", false, "TASK_ID");public final static Property TaskNum = new Property(2, String.class, "taskNum", false, "TASK_NUM");public final static Property Zcfdd = new Property(3, String.class, "zcfdd", false, "ZCFDD");

...

}

查询操作:

QueryBuilder builder =userDao.queryBuilder();

List userList3 = builder.where(UserDao.Properties.Id.gt(1005)).build().list();

附上 Demo :

4.GreenDao查询数据一个为空,一个不为空的问题。

2018年7月12日 - 周三 今天活脱脱被自己坑了一把。。。。

f69be892277a0ab84034e36aa8ff973a.png

对应的结果实体类:

b9beab0bf3188e767be496e7984bf080.png

问题出现在每次用 UpAssetResultDao 查询的时候都查不全,一个有result集合,另一个却为空数组。。

问题代码:

resultBeanDao.insertOrReplaceInTx(mTableList);// 1 ResultBean 插入数据集合

UpAssetResult upResult= newUpAssetResult();...

upResult.setTaskId(pk);

upResult.setResult(mTableList);//2TODO 直接用 List list = upAssetResultDao.loadAll(); 数据不全的问题

// List dataList = new ArrayList<>();

// dataList.add(upResult);

upAssetResultDao.insertOrReplaceInTx(upResult);L.e("resultBeanDao size :" + resultBeanDao.count());//3 插入成功

错就错在红色字体处,UpAssetResult 实体是通过外建关联 ResultBean 的id进行数据绑定的,

红色部分在ResultBean外面又封装了一层 List 虽然数据也能成功插入到ResultBean的数据库表中,但是没有关联上 UpAssetResult

实体。导致后面操作UpAssetResultDao 进行查询时出现数据异常的问题!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值