rxjava 嵌套网络访问出现空指针

项目中需要通过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的组合啊。

阅读 2.3k
2 个回答

本身的数据有OCR方法而来,OCR方法是网络访问,just是将数据立即进行发送,这导致了数据为空和在主线程进行了网络访问的问题,解决办法如下:

Disposable disposable = Observable.fromCallable(
            @Override
                public Object call(){
                    return .....
                })
                        .observeOn(AndroidSchedulers.MainThread())
                        .subscribeOn(schedulers.newThread())
                        .flatMap(new Function<Rsult,ItemsBean>(){
                            ............此处省略
                        })
                        .subscribe(new Consumer(){
                            ............此处省略
                        })

即可解决问题

observeOn和subscribeOn顺序出了问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏