【问题标题】:I keep receiving a null value despite assigning the value to it尽管将值分配给它,但我仍然收到空值
【发布时间】:2019-04-20 06:02:21
【问题描述】:

我想将 API 响应分配给 Kotlin 中的全局数组列表,但数组列表在 handleResponse 函数之外仍然为空 var 一次性:一次性? =空 lateinit var mMap:谷歌地图 var sensorsData = ArrayList()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_maps)
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.

    showReading("Jxh7GGbk5S5KaBcnlQ4vUw")
    val mapFragment = supportFragmentManager
        .findFragmentById(R.id.map) as SupportMapFragment
    mapFragment.getMapAsync(this)

}
fun showReading(token: String) {

    disposable = client.sensorData(token)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(this::handleResponse)

}
fun handleResponse(sensorData: SensorNode) {

    this.sensorsData.add(sensorData)
    Log.d("SENSOR DATA", "" + sensorsData.get(0)) // Works
}
override fun onMapReady(googleMap: GoogleMap) {
    mMap = googleMap
    Log.d("SENSOR DATA", "" + sensorsData.get(0)) // Return Null
    val sensor = LatLng(-6.8, 39.0)
    mMap.addMarker(MarkerOptions().position(sensor).title("Sensor Node 1"))
}
override fun onPause() {
    super.onPause()
    disposable?.dispose()
}

【问题讨论】:

  • 什么时候调用handleResponse方法?可能在您在数组中插入项目之前先执行了 onMapReady
  • onMapReady 之前

标签: android google-maps kotlin retrofit2 rx-java2


【解决方案1】:

问题是showReadingmapFragment.getMapAsync 是两个异步调用,所以你不能保证哪个会先完成。处理此问题的最快方法 - 同时启动它们并在两者完成之前等待然后采取行动。

如果您想使用响应式流范例,您可以执行以下操作:

  Single.create<GoogleMap> { emitter ->
            map.getMapAsync { emitter.onSuccess(it) }
        }.zipWith(sensorData(token), BiFunction<GoogleMap, SensorNode, Unit> { map, node -> 
            //do what you want with map and sensordata
        })
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(this::handleResponse)

【讨论】:

    猜你喜欢
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-20
    相关资源
    最近更新 更多