You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中Observable.takeLast引发NPE问题排查求助

问题描述

我定义了如下RxJava的BehaviorSubject:

companion object {
        var isLocationToolActive: BehaviorSubject<Boolean> = BehaviorSubject.createDefault(false)
        var isAoIToolActive: BehaviorSubject<Boolean> = BehaviorSubject.createDefault(false)
        var pointToPosition: BehaviorSubject<GeoPoint> = BehaviorSubject.createDefault(GeoPoint(0.0, 0.0))
}

init {
   pointToPosition.subscribe {  // 该行抛出异常
      // 一些代码
   }
}

运行时抛出空指针异常:

java.lang.NullPointerException: Attempt to invoke virtual method 'io.reactivex.Observable io.reactivex.Observable.takeLast(long, java.util.concurrent.TimeUnit, io.reactivex.Scheduler, boolean, int)' on a null object reference
    at io.reactivex.Observable.takeLast(Observable.java:11258)
    at <上述代码行>

已尝试的操作均未解决问题:

  • 将Subject移出companion object
  • 在subscribe前调用onNext()
  • 修改subscribe逻辑
  • 将subscribe移出init()
  • 注释所有调用pointToPosition的代码

补充:问题仅出现在特定设备,三星Galaxy Tab S2 (SM-T713)崩溃,同系列SM-T710及新款Galaxy Tab A8可正常运行。

可能的解决方案
  • 统一RxJava版本并适配旧系统:SM-T713的Android版本通常偏旧(多为7.0/8.0),当前RxJava版本可能在旧系统存在初始化bug。尝试降级至RxJava 2.2.x稳定版,或升级到兼容旧系统的最新版本,避免新版本API要求超出设备系统支持范围。
  • 修复混淆配置:若开启代码混淆,可能是RxJava核心类被错误混淆导致空指针。在proguard规则中添加保护:
    -keep class io.reactivex.** { *; }
    -keep interface io.reactivex.** { *; }
    -keepclassmembers class io.reactivex.** { *; }
    
  • 延迟初始化Subject:避免在companion object或init块中过早初始化,改用lazy懒加载确保初始化顺序正确:
    companion object {
        val isLocationToolActive by lazy { BehaviorSubject.createDefault(false) }
        val isAoIToolActive by lazy { BehaviorSubject.createDefault(false) }
        val pointToPosition by lazy { BehaviorSubject.createDefault(GeoPoint(0.0, 0.0)) }
    }
    
  • 排查依赖冲突:执行./gradlew app:dependencies查看依赖树,排除项目中重复或冲突的RxJava相关依赖,统一版本。
  • 验证GeoPoint初始化:旧设备可能存在构造函数隐性问题,尝试提前初始化GeoPoint再传入:
    private val defaultGeoPoint = GeoPoint(0.0, 0.0)
    val pointToPosition by lazy { BehaviorSubject.createDefault(defaultGeoPoint) }
    

内容的提问来源于stack exchange,提问作者kristyna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:50:00