У меня есть список MeasurementValue. Я хочу выполнить API-вызов AWS для каждого из них, чтобы создать новое MeasurementValue в AWS. Если он был успешно создан в AWS, я получу идентификатор для этого. Мне нужно установить восстановленный идентификатор как valueId и сохранить его локально в базе данных комнаты. Когда все выполнение вызова выполнено, я могу сделать некоторые другие вещи, основанные на моем требовании. Но я получаю только последний элемент в подписке. Вот код в моей ViewModel.
Observable.fromIterable(measurement.values)
.doOnSubscribe {
//Show loader
}
.doAfterTerminate {
//Close the loader
}
.flatMapSingle { value: MeasurementValue ->
measurementValueRepository.saveMeasurementValueInAWS(value)
}
.subscribe({ measurementValue ->
measurementValueRepository.saveMeasurementValue(measurementValue)
isDataSaved.postValue(true)
}, { throwable ->
throwable.printStackTrace()
})
В репозитории
override fun saveMeasurementValueInAWS(measurementValue: MeasurementValue): SingleSource<MeasurementValue> {
return measurementValueAwsSource.createMeasurementValueInAWS(measurementValue)
}
Код для вызова AWS.
override fun createMeasurementValueInAWS(measurementValue: MeasurementValue): Single<MeasurementValue> {
return Single.create { emitter ->
var createMeasurementValueInput = CreateMeasurementValueInput.builder()
createMeasurementValueInput.measurementValueMeasurementId(measurementValue.measurementId)
createMeasurementValueInput.unit(measurementValue.unit)
createMeasurementValueInput.value(measurementValue.value)
var createMeasurementValueMutation = CreateMeasurementValueMutation.builder().input(createMeasurementValueInput.build()).build()
val mutationCallback = object : GraphQLCall.Callback<CreateMeasurementValueMutation.Data>() {
override fun onResponse(response: Response<CreateMeasurementValueMutation.Data>) {
var id = response.data()?.createMeasurementValue()?.id()
id?.let {generatedId ->
measurementValue.valueId = generatedId
emitter.onSuccess(measurementValue)
}
}
override fun onFailure(e: ApolloException) {
emitter.onError(e)
}
}
awsAppSyncClient.mutate(createMeasurementValueMutation).enqueue(mutationCallback)
}
}