Вложенное заполнение объектов с использованием потоковAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Вложенное заполнение объектов с использованием потоков

Сообщение Anonymous »

У меня есть объект ActivityUiState (типа ActivityUiState), который имеет список поддействий (также типа ActivityUiState) и список голосовых заметок. Я пытаюсь заполнить ActivityUiState списком поддействий и голосовыми заметками, используя потоки. Каждое из поддействий может иметь свои собственные голосовые заметки, сохраненные в базе данных, которые я хотел бы включить в объекты поддействий при создании списка поддействий. На данный момент код успешно добавляет поддействия и голосовые заметки в ActivityUiState. Однако когда я пытаюсь добавить голосовые заметки для каждого из поддействий, весь объект ActivityUiState не обновляется никакими данными. Что я здесь делаю не так?
var subActivitiesUiState = emptyList()
activitiesRepository.getSubActivitiesPerMainActivity(id).collect { subActivities ->
for (subActivity in subActivities) {
var voiceNotesUiState = emptyList()
// This code block results in an empty activityUiState being returned
/*
voiceNotesRepository.getAllVoiceNotesPerActivity(subActivity.id).collect { voiceNotes ->
for (voiceNote in voiceNotes) {
// Append the mapped voice note to the voice notes list
voiceNotesUiState = voiceNotesUiState + VoiceNoteUiState(
id = voiceNote.id,
uri = voiceNote.uri,
duration = voiceNote.duration,
timestamp = voiceNote.timestamp,
activityId = voiceNote.activityId
)
}

subActivitiesUiState = subActivitiesUiState + ActivityUiState(
id = subActivity.id,
title = subActivity.title,
note = subActivity.note,
startTime = subActivity.startTime,
endTime = subActivity.endTime,
voiceNotesUiState = voiceNotesUiState,
mainActivityId = subActivity.mainActivityId
)
}
*/

subActivitiesUiState = subActivitiesUiState + ActivityUiState(
id = subActivity.id,
title = subActivity.title,
note = subActivity.note,
startTime = subActivity.startTime,
endTime = subActivity.endTime,
voiceNotesUiState = voiceNotesUiState,//TODO: Add the voice notes of the sub-activity
mainActivityId = subActivity.mainActivityId
)
}

activityUiState.update {
ActivityUiState(
id = activity.id,
title = activity.title,
note = activity.note,
startTime = activity.startTime,
endTime = activity.endTime,
subActivitiesUiState = subActivitiesUiState
)
}

var voiceNotesUiState = emptyList()
voiceNotesRepository.getAllVoiceNotesPerActivity(id).collect { voiceNotes ->
for (voiceNote in voiceNotes) {
// Append the mapped voice note to the voice notes list
voiceNotesUiState = voiceNotesUiState + VoiceNoteUiState(
id = voiceNote.id,
uri = voiceNote.uri,
duration = voiceNote.duration,
timestamp = voiceNote.timestamp,
activityId = voiceNote.activityId
)
}

activityUiState.update { it ->
it.copy(
voiceNotesUiState = voiceNotesUiState
)
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... sing-flows
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»