请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

本地刷新和网络刷新,在添加到界面的时候会有可能冲突;导致数据显示异常

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做判断是否为预加载数据 解决这个问题

劳烦大家看看是不是我想错了 。。。。


正在回答 回答被采纳积分+3

1回答

Qiujuer 2018-03-13 10:59:57

首先给你一个赞~~

你的思路是正确的,这里的确存在冲突的情况,如果网络足够快,而数据库查询慢的情况会导致数据显示异常的问题;要解决这个问题也很简单,将这边显示到页面的逻辑丢入到一个单线程队列中去运行。

然后网络返回的数据先进行数据库入库,然后再次进入到队列中执行,那么就不存在这个问题了。


这个问题是因为多线程的并发,而没有统一的消费者来做顺序执行会导致的问题,感谢你的指出。


非常抱歉才回复,抱歉。


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信