本地刷新和网络刷新,在添加到界面的时候会有可能冲突;导致数据显示异常
来源:8-17 数据流封装-推送消息处理-1
慕粉3459212
2017-12-29
3.本地刷新和网络刷新,在添加到界面的时候会有可能冲突;导致数据显示异常
关于这个问题 其实我感觉老师并没有解决,而是模糊带过了 。。。
ContactRepository.class
中将这段代码:
SQLite.select()
.from(User.class)
.where(User_Table.isFollow.eq(true))
.and(User_Table.id.notEq(Account.getUserId()))
.orderBy(User_Table.name, true)
.limit(100)
.async()
.queryListResultCallback(this)
.execute();
替换成这段:
new Thread(new Runnable() {
@Override
public void run() {
final List<User> users = SQLite.select()
.from(User.class)
.where(User_Table.isFollow.eq(true))
.and(User_Table.id.notEq(Account.getUserId()))
.orderBy(User_Table.name, true)
.limit(100)
.queryList();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Run.onUiAsync(new Action() {
@Override
public void call() {
onListQueryResult(null, users);
}
});
}
}).start();
发现网络请求先回来 后面数据库查询的数据才回来 界面的刷新就会有问题了
而在onDataSave中添加个boolean做判断是否为预加载数据 解决这个问题
劳烦大家看看是不是我想错了 。。。。
1回答
-
Qiujuer
2018-03-13
首先给你一个赞~~
你的思路是正确的,这里的确存在冲突的情况,如果网络足够快,而数据库查询慢的情况会导致数据显示异常的问题;要解决这个问题也很简单,将这边显示到页面的逻辑丢入到一个单线程队列中去运行。
然后网络返回的数据先进行数据库入库,然后再次进入到队列中执行,那么就不存在这个问题了。
这个问题是因为多线程的并发,而没有统一的消费者来做顺序执行会导致的问题,感谢你的指出。
非常抱歉才回复,抱歉。
012020-03-08
相似问题
回答 1
回答 1