【问题标题】:How to Search a Firebase Firestore Data Base on Selected Month in android studio Kotlin Language如何在 android studio Kotlin 语言中搜索选定月份的 Firebase Firestore 数据库
【发布时间】:2021-06-01 07:47:57
【问题描述】:

Activitymain.xml 中的 Firestore 数据库访问代码

    db.collection("billNo") // I think want to add some code here to get the data!!//
            .get()
            .addOnSuccessListener {
                user.clear()
                for (document in it) {
                    user.add(User(
                            document.id,
                            document.data.get("billNo").toString().toInt(),
                            document.data.get("date").toString(),
                            document.data.get("name").toString(),
                            document.data.get("amount").toString().toInt(),
                            document.data.get("payment").toString()
                    )
                    )
                }

数据库结构

@Parcelize
    data class User(
    val id: String,
    val billNo: Int,
    val date: String,
    val name: String,
    val amount: Int,
    var payment:String
    ) : Parcelable

我将 billNo、日期、姓名、金额、paid_or_unpaid 数据添加到 FIREBASE 数据库中。因此,当我单击搜索时,我想在 RecyclerView 中获取所选月份的详细信息。所有 RecyclerView 代码和其他东西都工作得很好。只有我想检索所选月份的数据。

当我单击以下活动中的相应月份和年份时(下面提供了屏幕截图),我想从 FIREBASE FIRE STORE 数据库中获取相应月份的账单详细信息。我尝试了很多。但我找不到解决方案。我正在使用 KOTLIN 编程语言在 Android Studio 上做我的项目。

【问题讨论】:

  • 我不确定我是否理解。这段代码中究竟有什么不能按您期望的方式工作?告诉我们共享代码有什么问题。你有什么错误吗?
  • 当我添加另一个月账单时,它也会显示在回收站视图中。输入到 firebase 的所有数据都显示在应用程序中。我想将其限制在选定的月份和年份。这样我就会得到所选月份的账单。
  • 请编辑您的问题并将您的数据库结构添加为屏幕截图。还请说明您想要获取的确切数据。
  • 是的。我纠正了我的问题。我需要使用 KOTLIN 对 FIREBASE 中的 LIKE 运算符进行类似 sql 查询。这样我就可以搜索数据和月份。 “SELECT * from tablename WHERE date LIKE %$month-$year%”。我想在 FIREBASE 中使用 KOTLIN 作为语言进行这样的操作
  • 我明白了。我马上给你写一个答复。

标签: android firebase kotlin google-cloud-firestore


【解决方案1】:

Firestore 中没有 LIKE 运算符。所以这样的查询:

"SELECT * from tablename WHERE date LIKE %$month-$year%"

实际上不可能。因为您的“日期”字段实际上是一个字符串,所以在使用小型数据集时,您可能会考虑使用:

或者您可以尝试使用在 Google I/O 2021 上宣布的新 Firebase 扩展:

或者直接在代码中:

但是,有两种解决方法可用于实现相同的结果。第一个是在您的用户对象中创建另一个名为“monthYear”的字段。此属性将保存与“日期”属性不同的值。例如,如果您的“date”属性的值为“03-May-2021”,“monthYear”属性将保存“May-2021”的值。话虽如此,查询在 Kotlin 中将如下所示:

val rootRef = FirebaseFirestore.getInstance()
val queryByMonthYear = rootRef.collection("billNo").whereEqualTo("monthYear", "May-2021")

第二种解决方案是将“日期”的类型从字符串更改为时间戳。请参阅下面如何将时间戳添加到 Firestore:

它在 Java 中,但您可以在 Kotlin 中简单地转换它。然后,您可以使用 Query 调用 startAt(startDate)endAt(endDate)

【讨论】:

  • 嘿阿比!我可以帮助您了解其他信息吗?如果您认为我的回答对您有所帮助,请考虑通过单击左侧投票箭头下方的复选标记(✔️)来接受它。应将颜色更改为绿色。我真的很感激。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-11-18
  • 2018-02-06
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 2022-06-21
相关资源
最近更新 更多