Мой State Flow не обновляет значения в модели представленияAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Мой State Flow не обновляет значения в модели представления

Сообщение Anonymous »

У меня есть код для анализа изображений, и я пытаюсь передать список обработанных текстовых данных в ViewModel. Текст распознается, но не отправляется должным образом в ViewModel. Я зарегистрировал данные, и анализ изображений распознает текст, обработает его, сопоставит со списком и успешно обновит _detectedText.value. Однако когда я регистрирую ViewModel, он сначала получает данные, но затем останавливается. Я не знаю, что делать — я работаю над этим уже около двух недель.
Код анализа изображений:

class TextRecognitionAnalyzer: ImageAnalysis.Analyzer {

//Throttling time for the text recognition 1000L - 1 second
companion object {
const val THROTTLE_TIMEOUT_MS = 1_000L
}

//defining the coroutine scope and the text recognizer
private val scope: CoroutineScope = CoroutineScope(Dispatchers.IO + SupervisorJob())
private val textRecognizer: TextRecognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)

// StateFlow to hold the detected text
private val _detectedText = MutableStateFlow(emptyList())
val detectedText: StateFlow get() = _detectedText

@androidx.annotation.OptIn(ExperimentalGetImage::class)
override fun analyze(imageProxy: ImageProxy) {

scope.launch {
val mediaImage: Image = imageProxy.image ?: run { imageProxy.close(); return@launch }
val inputImage: InputImage = InputImage.fromMediaImage(mediaImage, imageProxy.imageInfo.rotationDegrees)

suspendCoroutine { continuation ->
textRecognizer.process(inputImage)
.addOnSuccessListener { visionText: Text ->
// Process and update detected text
Log.d("TextRecognitionAnalyzer", "Detected Text: ${visionText.text}")
_detectedText.value = ProcessDetectedText(visionText).processText().toList()
Log.d("TextRecognitionAnalyzer state flow", "Detected Text in State: ${_detectedText.value}")
}
.addOnCompleteListener {
continuation.resume(Unit)
}
}

delay(THROTTLE_TIMEOUT_MS)
}.invokeOnCompletion { exception ->
exception?.printStackTrace()
imageProxy.close()
}
}
}

Код модели просмотра:

@HiltViewModel
class ClassRoomAddViewModel @Inject constructor(
private val textRecognitionAnalyzer: TextRecognitionAnalyzer
) : ViewModel() {

private val _addClassRoomState = MutableStateFlow(AddClassRoomState())
val addClassRoomState: StateFlow = _addClassRoomState

init {
Log.d("ViewModel", "Analyzer injected: $textRecognitionAnalyzer")
collectDetectedText()
Log.d("ViewModel", "Initialized ViewModel")
}

private fun collectDetectedText() {
viewModelScope.launch {
textRecognitionAnalyzer.detectedText.collect { updatedText ->
Log.d("ViewModel", "Collected Detected Text: $updatedText")
_addClassRoomState.value = _addClassRoomState.value.copy(
detectedText = updatedText
)
Log.d("ViewModel", "State Updated: ${_addClassRoomState.value}")
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... -viewmodel
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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