Как мне заставить мой код в kotlin читать данные из firebase firestore

Я пытаюсь создать приложение, которое считывает данные из firebase firebase, а затем показывает на экране те же данные. Проблема в том, что данные появляются только при отображении в журнале, но я хочу, чтобы они были в тексте (строка) Может ли кто-нибудь помочь мне понять, как это сделать

Я уже пробовал много видео с объяснениями, но ни одно из них не работает, поэтому мой последний вариант - действительно попросить здесь о помощи.

Вот код

@SuppressLint("UnrememberedMutableState")
@Composable
fun DB () {
    val db = Firebase.firestore
    val collectionReference = db.collection("Inventário")
        .document("Bloco E")
        .collection("Sala E0.05")

    val data = mutableStateOf(mapOf<String, Any>())
    val job = remember { Job() }

    remember {
        GlobalScope.launch(Dispatchers.Main) {
            val documentSnapshot = collectionReference.document("Computador").get().await()
            try {
                data.value = documentSnapshot.data ?: mapOf()
            }catch (e: Exception){
                Log.e("Firestore", "Error retrieving data", e)
            }

        }
    }

    Column() {
        data.value.forEach { (key, value) ->
            Text("$key: $value")}
    }
}

А вот структура базы данных:

Пожалуйста, отредактируйте свой вопрос и добавьте структуру вашей базы данных в виде снимка экрана.

Alex Mamo 13.02.2023 11:57

уже сделал это

Alexandre Caneca 13.02.2023 12:43

Поскольку вы используете Kotlin и Jetpack Compose, я думаю, что этот ресурс поможет. Вот соответствующий репозиторий.

Alex Mamo 13.02.2023 13:28

Ваш пост не очень помог, потому что я уже пытался использовать тот же сайт, и это не сработало, но спасибо за попытку.

Alexandre Caneca 14.02.2023 14:05
Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
1
4
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, вы забыли использовать remember на своем MutableState (а также подавили предупреждение о ворсе с помощью (@SuppressLint("UnrememberedMutableState"))):

val (data, setData) = remember { mutableStateOf(mapOf<String, Any>()) }

Также не рекомендуется использовать GlobalScope в Android. Вместо этого рассмотрите возможность использования LaunchedEffect:

@Composable
fun DB () {
    val db = Firebase.firestore
    val collectionReference = db.collection("Inventário")
        .document("Bloco E")
        .collection("Sala E0.05")

    val (data, setData) = remember { mutableStateOf(mapOf<String, Any>()) }

    LaunchedEffect(collectionReference) {
        try {
          val documentSnapshot = collectionReference.document("Computador").get().await()
          setData(documentSnapshot.data ?: mapOf())
        } catch (e: Exception) {
          Log.e("Firestore", "Error retrieving data", e)
        }
    }

    Column() {
        data.value.forEach { (key, value) ->
            Text("$key: $value")}
    }
}

Другие вопросы по теме