You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin中Firebase Firestore无法获取ID问题求助

Firestore获取数据时ID字段为空的解决方法

问题根源

Firestore的文档ID属于文档元数据,不会自动映射到数据类的普通字段。你的Tenant数据类里的id字段是作为文档内字段定义的,但数据库中文档并没有存储id字段,所以读取后该字段为空;而你实际需要的应该是Firestore文档本身的ID(截图里文档的ID值,比如101)。

解决方案

方案1:手动赋值文档ID

在查询Firestore获取数据时,手动将文档ID赋值给Tenant对象的id属性:

// 示例查询代码
db.collection("tenants").get()
    .addOnSuccessListener { querySnapshot ->
        val tenants = mutableListOf<Tenant>()
        querySnapshot.forEach { document ->
            // 将文档ID赋值给Tenant的id字段
            val tenant = document.toObject(Tenant::class.java).apply {
                id = document.id
            }
            tenants.add(tenant)
        }
        // 将tenants列表传递给适配器
    }

方案2:用@DocumentId注解自动映射

给数据类的id字段添加@DocumentId注解,Firestore会自动将文档ID映射到该字段,无需手动赋值:

import com.google.firebase.firestore.DocumentId

data class Tenant(
    @DocumentId val id: String = "", // 注解自动绑定文档ID
    val room_number: String = "",
    val kost_name: String = "",
    val first_name: String = "",
    val phone_number: String = "",
    val floor_number: String = "",
    val room_ac: String = "",
    val water_heater: String = "",
    val room_clean: String = "",
    val room_vacancy: String = "",
    val ampere_number: String = "",
    val room_note: String = ""        
)

之后直接调用document.toObject(Tenant::class.java),id字段就会自动填充文档ID。

额外提示

看你适配器代码里的注释onUpdateTenant(tenant.room_number),如果你原本要传递的是room_number而非文档ID,那直接修改putExtra的参数即可:

putExtra("room_number", tenant.room_number)

内容的提问来源于stack exchange,提问作者Virgil Cruz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 05:03:22