在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  Android/ rxjava 嵌套網(wǎng)絡(luò)訪問出現(xiàn)空指針

rxjava 嵌套網(wǎng)絡(luò)訪問出現(xiàn)空指針

項目中需要通過ocr來識別圖中的文字,引用了第三方的ocr庫,但是在rxjava的嵌套中出了問題,代碼貼出來關(guān)鍵部分

Disposable disposable = Observable.just(OCR())
                        .observeOn(AndroidSchedulers.MainThread())
                        .subscribeOn(schedulers.newThread())
                        .flatMap(new Function<Rsult,ItemsBean>(){
                            ............此處省略
                        })
                        .subscribe(new Consumer(){
                            ............此處省略
                        })

其中ocr方法本身是網(wǎng)絡(luò)訪問并且返回Request實例,大概貼出ocr方法的代碼

public static Result OCR(){
    ImageClient imageClient = new ImageClient();
    String result = imageClient.OCR(**,**,**);//這個方法是網(wǎng)絡(luò)訪問
    Result resultEntity = gson.fromJson(result);
    return resultEntity;
}

運行后發(fā)現(xiàn)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(){
                            ............此處省略
                        })

然后又報網(wǎng)絡(luò)訪問在主線程中,請問這是什么原因呢,怎么去做這種類似的網(wǎng)絡(luò)訪問嵌套和rxjava的組合啊。

回答
編輯回答
失心人

observeOn和subscribeOn順序出了問題

2018年9月17日 07:03
編輯回答
遲月

本身的數(shù)據(jù)有OCR方法而來,OCR方法是網(wǎng)絡(luò)訪問,just是將數(shù)據(jù)立即進行發(fā)送,這導(dǎo)致了數(shù)據(jù)為空和在主線程進行了網(wǎng)絡(luò)訪問的問題,解決辦法如下:

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

即可解決問題

2018年8月3日 14:22