【问题标题】:The mapper function returned a null value映射器函数返回一个空值
【发布时间】:2017-12-05 11:31:52
【问题描述】:

我为调试和发布设置了相同的构建类型,

buildTypes {
    debug {
        buildConfigField "String", "API_BASE_URL", "\"https://www.testUrl.com/api/\""
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release_key
    }
    release {
        buildConfigField "String", "API_BASE_URL", "\"https://www.testUrl.com/api/\""
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release_key
    }
}

但如果我使用该版本进行构建,则会出现以下错误。 此外,服务器响应完全相同。

W/System.err: java.lang.NullPointerException: The mapper function returned a null value.
W/System.err:     at b.a.e.b.b.a(Unknown Source)
W/System.err:     at b.a.e.e.b.bs$a.onNext(Unknown Source)
W/System.err:     at b.a.e.e.b.cm$a.onNext(Unknown Source)
W/System.err:     at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(Unknown Source)
W/System.err:     at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(Unknown Source)
W/System.err:     at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(Unknown Source)
W/System.err:     at b.a.l.subscribe(Unknown Source)
W/System.err:     at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(Unknown Source)
W/System.err:     at b.a.l.subscribe(Unknown Source)
W/System.err:     at b.a.e.e.b.cm$a.a(Unknown Source)
W/System.err:     at b.a.e.e.b.cm.subscribeActual(Unknown Source)
W/System.err:     at b.a.l.subscribe(Unknown Source)
W/System.err:     at b.a.e.e.b.bs.subscribeActual(Unknown Source)
W/System.err:     at b.a.l.subscribe(Unknown Source)
W/System.err:     at b.a.e.e.b.bw.subscribeActual(Unknown Source)
W/System.err:     at b.a.l.subscribe(Unknown Source)
W/System.err:     at b.a.e.e.b.dd$b.run(Unknown Source)
W/System.err:     at b.a.s$a.run(Unknown Source)
W/System.err:     at b.a.e.g.j.run(Unknown Source)
W/System.err:     at b.a.e.g.j.call(Unknown Source)
W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err:     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
W/System.err:     at java.lang.Thread.run(Thread.java:761)

【问题讨论】:

  • 您能否尝试在禁用 proguard 的发布版本上重现该问题?
  • @MichaelDodd 是的,它可以在禁用 proguard 的情况下使用!那么它在调试模式下是如何工作的呢?它具有相同的 proguard 集。你能看看我的proguard-rules吗?
  • Retrofit2 calls sometimes result in 一个 null 正文,然后无条件转发到 RxJava。您必须使用完整的Response<T> 而不是直接检索。

标签: java android rx-java retrofit2 rx-java2


【解决方案1】:

问题来自 RxJava 2,它不允许 null 值沿流向下传递。特别是在您的情况下,您有一个映射器函数,它返回一个 null 值,异常清楚地说明了这一点。

您可以使用以下代码块来重现它:

Observable.just(1) .map(integer -> null) .test() .assertError(throwable -> "The mapper function returned a null value.".equals(throwable.getMessage()));

【讨论】:

  • 主要问题是这样的跟踪不允许知道哪个地图返回空值
  • 其实你可以处理这种情况。有关更多信息,请参阅文章:rongi.github.io/kotlin-blog/rxjava/2017/09/25/…
  • 1.我不明白这个问题是如何被标记为重复的。 2. 我不明白为什么没有答案可以帮助找到哪个地图返回空值。
  • @RefuX:“我不明白这个问题是如何被标记为重复的。”嗯,很多好问题都被标记为重复。这是基于审稿人的懒惰——他们只对已知的关键字做出反应:(我将问题标记为重新打开,请加入我。
猜你喜欢
  • 2019-10-31
  • 1970-01-01
  • 2019-10-22
  • 2012-05-17
  • 1970-01-01
  • 2019-01-05
  • 2015-04-05
  • 2019-06-16
  • 2021-02-17
相关资源
最近更新 更多