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
相关产品推荐
相关产品推荐

