Как заменить путь к документу строкой, которая может быть изменена пользователем в Android Studio Kotlin?

# #android #firebase #kotlin #google-cloud-firestore

Вопрос:

Я пытаюсь создать небольшое приложение, в котором пользователь сможет находить значения документов.

В качестве базы данных я использую базу данных Firestore. У меня есть только одна коллекция «хранилище» со множеством документов и 3 полями значений для каждого документа. Я уже создал действие, которое получает 3 поля значений из базы данных (см. Ниже).

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

Например, если пользователь вводит «apple» в поле ввода текста, я хочу показать ему 3 значения, которые я сохранил в коллекции «хранилище» -> документ «apple» ->> поля «значение1», «значение2» и «значение3»>>. Если пользователь вводит «банан» в поле ввода текста, я хочу показать ему 3 значения, которые я сохранил в коллекции «хранилище» -> документ «банан» ->> поля «значение 1», «значение 2» и «значение 3»>>.

Кто-нибудь может дать мне несколько советов, как это реализовать? К сожалению, я не мог найти большой помощи в другом месте.

Основная активность.тыс. т

 package com.example.test

import  android.content.ContentValues.TAG
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.TextView
import com.google.firebase.firestore.FirebaseFirestore
import com.google.firebase.firestore.ktx.firestore
import com.google.firebase.ktx.Firebase

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val db = Firebase.firestore

        val value1= findViewById(R.id.value1) as TextView
        val value2= findViewById(R.id.value2) as TextView
        val value3= findViewById(R.id.value3) as TextView

        val docRef = db.collection("storage").document("apple")
        docRef.get()
           .addOnSuccessListener { document ->
               if (document !=null) {
                    Log.d("exist", "DocumentSnapshot data: ${document.data}")

                   value1.text = document.getString("value1")
                   value2.text = document.getString("value2")
                   value3.text = document.getString("value3")
               } else {
                   Log.d("noexist", "No such docoument")
               }
           }
           .addOnFailureListener { exception ->
                Log.w("notexisting", "Error getting documents.", exception)
           }
    }
}
 

activity_main.xml (выглядит ужасно, но сейчас я просто хочу проработать функциональность)

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
    android:id="@ id/value1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.585" />

<TextView
    android:id="@ id/value2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintHorizontal_bias="0.873"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.585" />

<TextView
    android:id="@ id/value3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintHorizontal_bias="0.162"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.586" />


</androidx.constraintlayout.widget.ConstraintLayout>
 

Ответ №1:

Вам нужно будет ввести новое поле, в котором пользователь может ввести или выбрать название документа. Как только у вас это будет, вы сможете прочитать его значение и использовать его при доступе к базе данных с помощью чего-то подобного:

 ...
val value1= findViewById(R.id.value1) as TextView
val value2= findViewById(R.id.value2) as TextView
val value3= findViewById(R.id.value3) as TextView

val documentId = (findViewById(R.id.documentId) as TextView).getText().toString()
//                                     👆 Get the value the user entered here


val docRef = db.collection("storage").document(documentId)
                                      //       👆 Then use it here
docRef.get()
   .addOnSuccessListener { document ->
...