Проблема в том, что showReading
и mapFragment.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)