如何修复Mapper函数返回空值。“ Java / RxJava2 Null中的错误?

时间:2019-07-08 14:20:26

标签: null stream rx-java2 mapper

我在RxJava2和流(Observable和Observer)方面遇到了一些问题 实际上,我的流返回错误

The mapper function returned a null value.
io.reactivex.internal.functions.ObjectHelper.requireNonNull(ObjectHelper.java:39)
io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:57)
retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)
retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)
retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:47)

我的logcat没有显示代码在哪里中断。


 public static Observable<List<Business.Response.Doc>> streamArticles_Business() {
        NYT_TopStories_services nyt_services = NYT_TopStories_services.retrofit.create(NYT_TopStories_services.class);
        return nyt_services.getArticles_Business()
                .map(Business.Response::getDocs)
                .filter(str -> str != null)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .timeout(20, TimeUnit.SECONDS);
    }

和我的翻新版

 @GET("search/v2/articlesearch.json?q=business&api-key=" + apiKey)
    Observable<Business.Response> getArticles_Business();


    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://api.nytimes.com/svc/")
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .build();


您有什么办法解决此问题?

1 个答案:

答案 0 :(得分:0)

由于它是 RxJava 内部崩溃,因此您不会在代码中看到它,但是如果您遍历 #* @vtlvariable name="list" type="java.util.List" *# #macro( disabled $list ) #if($list.isEmpty()) disabled #end #end 层次结构,您将了解其背后的原因。

如果您使用空值进行映射,则会发生此崩溃,基本上如果语句变为 map{} 它将崩溃。一个简单的解决方法是为所有可空类型设置默认值。

例如:

map{null}