项目中需要通过ocr来识别图中的文字,引用了第三方的ocr库,但是在rxjava的嵌套中出了问题,代码贴出来关键部分
Disposable disposable = Observable.just(OCR())
.observeOn(AndroidSchedulers.MainThread())
.subscribeOn(schedulers.newThread())
.flatMap(new Function<Rsult,ItemsBean>(){
............此处省略
})
.subscribe(new Consumer(){
............此处省略
})
其中ocr方法本身是网络访问并且返回Request实例,大概贴出ocr方法的代码
public static Result OCR(){
ImageClient imageClient = new ImageClient();
String result = imageClient.OCR(**,**,**);//这个方法是网络访问
Result resultEntity = gson.fromJson(result);
return resultEntity;
}
运行后发现flatMap中获取到的result实例是空的,之后改变了部分代码,改成了大概这样
Disposable disposable = Observable.just(imageClient.OCR(**,**,**))
.observeOn(AndroidSchedulers.MainThread())
.subscribeOn(schedulers.newThread())
.map(new Function(){
............此处省略
})
.flatMap(new Function<Rsult,ItemsBean>(){
............此处省略
})
.subscribe(new Consumer(){
............此处省略
})
然后又报网络访问在主线程中,请问这是什么原因呢,怎么去做这种类似的网络访问嵌套和rxjava的组合啊。
本身的数据有OCR方法而来,OCR方法是网络访问,just是将数据立即进行发送,这导致了数据为空和在主线程进行了网络访问的问题,解决办法如下:
即可解决问题