# #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 ->
...