开发中关于从线程中返回数据的一点心得体会

如下方法:当你的返回值是来自线程返回的数据的话,这是就不适合用return来返回数据,因为当开启一个子线程去获取数据的同时,因为return还是属于主线程的,因此这时return会继续执行,那么这时return回去的数据就很有可能为null,因为从子线程获取的数据还没有返回来了,那么这时就可以使用接口回调来实现数据的同步性,只有当子线程获取到数据的时候,才会将数据传递给主线程,因为接口回调此时是放在子线程中的,为了直接操作ui,将回调方法放在主线程中。

 public void getData(String path, final HuiDiao huiDiao) {
        Observable.just(path).observeOn(Schedulers.newThread())
                .subscribe(new Consumer() {
                    @Override
                    public void accept(String s) throws Exception {
                        response = ocrGeneral(imageClient, "tencentyun", s);
                        if (!response.equals("")) {
                            Observable.just("").observeOn(AndroidSchedulers.mainThread())
                                    .subscribe(new Consumer() {
                                        @Override
                                        public void accept(String s) throws Exception {
                                            huiDiao.success(response);
                                        }
                                    });
                        } else {
                            Observable.just("").observeOn(AndroidSchedulers.mainThread())
                                    .subscribe(new Consumer() {
                                        @Override
                                        public void accept(String s) throws Exception {
                                            huiDiao.faild();
                                        }
                                    });
                        }
                    }
                });
    }
  public interface HuiDiao {
        void success(String response);
        void faild();
    }
public void getPath(String path) {
        paiZhaoModel.getData(path, new PaiZhaoModel.HuiDiao() {
            @Override
            public void success(String response) {
                view.closeDialog();
                view.showData(response);
            }

            @Override
            public void faild() {
                view.closeDialog();
                view.faild();
            }
        });
    }

你可能感兴趣的:(开发中关于从线程中返回数据的一点心得体会)