如下方法:当你的返回值是来自线程返回的数据的话,这是就不适合用return来返回数据,因为当开启一个子线程去获取数据的同时,因为return还是属于主线程的,因此这时return会继续执行,那么这时return回去的数据就很有可能为null,因为从子线程获取的数据还没有返回来了,那么这时就可以使用接口回调来实现数据的同步性,只有当子线程获取到数据的时候,才会将数据传递给主线程,因为接口回调此时是放在子线程中的,为了直接操作ui,将回调方法放在主线程中。
public void getData(String path, final HuiDiao huiDiao) {
Observable.just(path).observeOn(Schedulers.newThread())
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
response = ocrGeneral(imageClient, "tencentyun", s);
if (!response.equals("")) {
Observable.just("").observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
huiDiao.success(response);
}
});
} else {
Observable.just("").observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<String>() {
@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();
}
});
}