如何在 android 中正确建模 JSON 地图

How do you properly model a JSON map in android

我正在尝试将地图从 Firestore 传递到数据中 class 但我得到的是 null 而不是数据

这是访问我的数据的方式:

 firestoreDb = FirebaseFirestore.getInstance()
    val postsRef = firestoreDb
        .collection("posts")
        .limit(20)
        .orderBy("creation_time_ms", Query.Direction.DESCENDING)
        .orderBy("date", Query.Direction.DESCENDING)

    postsRef.addSnapshotListener { snapshot, exception ->
        if (exception != null || snapshot == null) {
            Log.e(TAG,"Exception when querying post", exception )
            return@addSnapshotListener
        }
        val postList = snapshot.toObjects(HousePost::class.java)
        for (post in postList) {
            Log.i(TAG, "Posts $post")
        }
    }

我的数据模型

    data class HousePost (
   @get:PropertyName("image_url")  @set:PropertyName("image_url") var postImage: String = "",
   var rent: String = "",
   var description: String = "",
   @get:PropertyName("creation_time_ms")  @set:PropertyName("creation_time_ms") var creationTimeMs: Long = 0L,
   var location: String = "",
   @get:PropertyName("post_id")  @set:PropertyName("post_id")var postId: String? = "",
   var rooms: String = "",
   var caption: String = "",
   var date: String = "",
   var owner: Owner? = null
)

我的主人模型class

class Owner(
var uid: String = "",
var username: String = "",
var email: String = "",
@get:PropertyName("profile_image") @set:PropertyName("profile_image")  var profileImage: String = "",
@get:PropertyName("user_type") @set:PropertyName("user_type")var usertype: String = "owner"

)

这是我的 firestore data 我知道有些字段是空字符串,但不应输出 null。 这是 logcat

的结果

2022-05-03 11:42:12.313 6581-6581/com.example.moveapplication I/MainActivity: Posts HousePost(postImage=https://firebasestorage.googleapis.com/v0/b/moveapplicationdb.appspot.com/o/Post%20Pictures%2Fian-dooley-_-JR5TxKNSo-unsplash.jpg?alt=media&token=6721ec57-7602-41ee-b7cd-b8b1838b27fc, rent=15000, description=Along Ngong road we have a studio room for you to rent. Located in a moder =n area with nice infrastrucure, creationTimeMs=1651561930185, location=Lenana, postId=, rooms=studio room, caption=studio room along Ngong road, date=03/05/2022, owner=null)

我的 index 来自 firestore

查看您的 class 定义,一切看起来都很好。您正在使用正确的注释。但是,当您使用以下查询时:

val postsRef = firestoreDb
    .collection("posts")
    .limit(20)

您需要知道您必须创建一个 index. It can be manually created inside the Firebase Console 或者如果您使用的是 Android Studio,您会在 logcat 中找到一条消息,听起来像这个:

FAILED_PRECONDITION: The query requires an index. You can create it here: ...

只需单击 link 或将 URL 复制并粘贴到网络浏览器中,系统就会自动为您创建索引。