如何在 Android Studio 中使用 Kotlin 从 Firebase 中的数据库中获取特定值?

Posted

技术标签:

【中文标题】如何在 Android Studio 中使用 Kotlin 从 Firebase 中的数据库中获取特定值?【英文标题】:How to get the specific value from a database in Firebase using Kotlin in Android Studio? 【发布时间】:2022-01-16 13:47:04 【问题描述】:

我很难从 firestore 的数据库中获取价值。

这是我的数据库的图片:

我要做的是从“添加帖子”文档中获取两个字段作为字符串形式,以将其传递到不同的 XML textView 以获取位置和描述。现在,当我运行它时,我的文本有些乱七八糟。

我想弹出标题位置,即“伊利诺伊州芝加哥”。我该怎么做?

这是我的活动:

package com.example.groupproject

import android.content.ContentValues.TAG

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.TextView
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.firestore.ktx.firestore
import com.google.firebase.ktx.Firebase

class InspectPostActivity : AppCompatActivity() 

    private lateinit var locationTextView: TextView
    private lateinit var reference: DatabaseReference

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_inspect_post)

        // Linking all of the elements to their views
     
        locationTextView = findViewById(R.id.locationView)

        reference = FirebaseDatabase.getInstance().reference.child("Chicago, Illinois").child("locationTitle")

       
        // Sets the text to the database location
        locationTextView.text = reference.toString()
    

【问题讨论】:

【参考方案1】:

Firebase 附带两个 NoSQL 数据库:实时数据库(一个 NoSQL JSON 数据库)和 Cloud Firestore(一个 NoSQL 文档/集合数据库)。虽然两者都是 Firebase 的一部分,但它们是完全独立的,其中一个的 API 无法在另一个上运行。

您的问题和屏幕截图中的 google-cloud-firestore 标记表明您正在使用 Cloud Firestore,但您代码中的 FirebaseDatabase.getInstance() 正在尝试访问 Firebase 的实时数据库。要从 Firestore 获取文档,请改用 Firestore API for reading data。

【讨论】:

嘿,我明白了。我发现我的错误是什么。我将发布我的解决方案。 这是有道理的。我在网上查看了很多不同的视频和代码,所以我将其实现到其中,因为它是我能得到的最接近的。【参考方案2】:

这是我发现如何做到这一点的方法。我摆脱了 Frank Van Puffelen 告诉我的那条线,而是实现了它。

// Sets the text to the database location
        val docRef = db.collection("Add Post").document("Eau Claire, Wisconsin")
        docRef.get()
            .addOnSuccessListener  document ->
                if (document != null) 
                    Log.d("Exists", "DocumentSnapshot data: $document.data")

                   // locationTextView.text = document.getString("locationTitle")
                    locationTextView.setText(document.getString("titleLocation"))
                    descriptionTextView.setText(document.getString("Description"))
                
                else 
                    Log.d("noExist", "No Such Document")
                
            

我所要做的就是简单地在其中添加带有这个的行:

document.getString(Name of Textfield) 

【讨论】:

以上是关于如何在 Android Studio 中使用 Kotlin 从 Firebase 中的数据库中获取特定值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在模块(Android Studio)中使用 com.android.databinding?

如何在android应用里执行adb 命令

如何在 Android Studio 中使用我自己的 Android.mk 文件

如何在所有活动中使用Android Studio默认导航抽屉[重复]

如何在Android Studio中使用YouTube API在Android应用中列出视频

如何在visual studio开发android程序