EventBus回调,获取线程异步执行之后的结果

问题来源:

最近的项目中涉及到WebView的开发,检查项目模块来自于SQLite,因为项目太多,如果获取数据不使用LitePal异步获取,在页面之前的跳转会产生短暂的卡顿。(LitePal默认操作SQLite是在主线程中进行的,数据不多影响不大,数据太多的时候会造成UI卡顿,郭神后来修改的版本增加了异步操作,解决了大量操作数据库产生的问题)

其实这样也符合常规逻辑:

页面数据的加载等耗时操作都是放在子线程中进行的,为了防止产生ANR。同样操作SQLite也是耗时操作,同样采用异步操作,开启新线程。



解决方法:

因为使用的是LitePal的异步查询,返回的结果只能在onFinish()中操作,因为类别太多如果写在里面的话重复的代码太多,所以想在主方法中获取异步线程返回的结果。涉及到回调,这里采用的是EventBus

EventBus事件处理方法中获取到异步线程返回的json结果,然后显示即可。

//异步查询
                DataSupport.findAllAsync(CRM_DTYY_JDJYXM.class).listen(new FindMultiCallback() {
                    @Override
                    public <T> void onFinish(List<T> t) {

                        //项目表
                        final List<CRM_DTYY_JDJYXM> list = (List<CRM_DTYY_JDJYXM>) t;


                        DataSupport.where("JYJL_ID = ?", ID).findAsync(CRM_DTYY_JDJYXM_ANS.class).listen(new FindMultiCallback() {
                            @Override
                            public <T> void onFinish(List<T> t) {

                                //结果表
                                final List<CRM_DTYY_JDJYXM_ANS> list1 = (List<CRM_DTYY_JDJYXM_ANS>) t;


                                if (list.size() != 0) {

                                    String json = "[";

                                    for (int i = 0; i < list.size(); i++) {

                                        if (list1.size() == 0) {
                                            //结果表为空

                                            //gson
                                            Gson gson = new GsonBuilder().serializeNulls().create();
                                            HashMap<String, Object> map = new HashMap<>();
                                            map.put("ID",list.get(i).getMYID());
                                            map.put("JYLB",list.get(i).getJYLB());
                                            map.put("YJ",list.get(i).getYJ());
                                            map.put("EJ",list.get(i).getEJ());
                                            map.put("SJ",list.get(i).getSJ());
                                            map.put("SEQ",list.get(i).getSEQ());
                                            map.put("SEQ_JL",list.get(i).getSEQ_JL());

                                            map.put("JYJG","符合");
                                            map.put("SHUJU", null);

                                            json += gson.toJson(map) + ",";

                                        }else {

                                            for (int j = 0; j < list1.size(); j++) {

                                                //CRM_DTYY_JDJYXM_ANS . XM_ID =  CRM_DTYY_JDJYXM . ID

                                                if (list.get(i).getMYID().equals(list1.get(j).getXM_ID())) {
                                                    //Gson
                                                    Gson gson = new GsonBuilder().serializeNulls().create();
                                                    HashMap<String, Object> map = new HashMap<>();
                                                    map.put("ID",list.get(i).getMYID());
                                                    map.put("JYLB",list.get(i).getJYLB());
                                                    map.put("YJ",list.get(i).getYJ());
                                                    map.put("EJ",list.get(i).getEJ());
                                                    map.put("SJ",list.get(i).getSJ());
                                                    map.put("SEQ",list.get(i).getSEQ());
                                                    map.put("SEQ_JL",list.get(i).getSEQ_JL());

                                                    map.put("JYJG",list1.get(j).getJYJG());
                                                    map.put("SHUJU", list1.get(j).getSHUJU());

                                                    json += gson.toJson(map) + ",";
                                                }
                                            }
                                        }
                                    }

                                    json = json.substring(0, json.length() - 1) + "]";

                                    //发送黏性事件
                                    EventBus.getDefault().postSticky(new MyJson2Webview(json));

                                }
                            }
                        });


                    }
                });

//异步操作 事件处理
    @Subscribe(threadMode = ThreadMode.POSTING,sticky = true)
    public void MyJson2Webview(MyJson2Webview myJson2Webview) {

        jsonDb = myJson2Webview.getJson();

        //防止转义
        jsonDb = jsonDb.replace("\n","\\n").replace("\r","\\r").replace("\r\n","\\r\\n");


        webView.addJavascriptInterface(new JSBridge(), "android");

    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿姨不可以嘛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值