问题开始
最开始测试的时候只有几十条数据,无所谓。到了昨天测得时候导入了2000条,这两千条要下拉搜索,也可以输入搜索。
界面差不多这样
在主界面获取了这个下拉数据保存之后,再进入页面用Greendao取出去,甚至实时搜索。在滑动下拉的时候出现了数据不全,多输几次就卡死的情况。
解决办法
解决问题的时候,我在想,数据显示不全是什么原因。(找原因的过程很暴躁……)
因为数据库还没完成操作,界面就更新了!!!!!!!!!
数据库操作属于耗时操作,最开始我想过我自己弄一个AsynTask,然后弄俩接口也可以完成(保存操作最开始就是这样完成的)。
但是今早灵光一闪,这赤裸裸的响应式编程啊,为何不用RxJava?
再一搜,Greendao3.0竟然集成了RxJava!!!!!!
接下来的过程就很愉快了,直接上代码:
// 存数据
MyApplication.mDaoSession
.getInWarehouseDataDao()
.rx()
.insertInTx(resultBean.getResult().getData()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Iterable<InWarehouseData>>() {
@Override
public void call(Iterable<InWarehouseData> inWarehouseData) {
mView.getComponentListByProjectSuc(projectID, type);
mView.hideProgress();
}
});
//搜索
RxQuery<InWarehouseData> rxQuery=MyApplication
.mDaoSession.getInWarehouseDataDao().queryBuilder()
.where(InWarehouseDataDao.Properties.AssemblyNo.eq(twCode))
.limit(100).rx();
Observable<List<InWarehouseData>> observer=rxQuery.list();
observer.observeOn(AndroidSchedulers.mainThread())//在主线程中调用
.subscribe(new Action1<List<InWarehouseData>>() {
@Override
public void call(List<InWarehouseData> list) {
//进行UI更新操作
if (list.size() < 1) {
mView.showFailToast("");
} else {
mView.searListSuc(list,twCode);
}
}
});
是的,我限制了只显示100条,是个正常人都不会下拉2000个来选吧,而且还大多长得很像,所以对输入框输入进行监听即可。
仅以记录,若对其他人有用则太好了