Android 使用改装时,Firestore时间戳为(秒:0,纳秒:0)
我遇到了在Android应用程序中解析Firestore时间戳的问题 总结 在我的Firebase Firestore中,我有一组评论。每个评论都是这样的 (时间为时间戳类型) 我已经使用云函数构建了RESTAPI。有一个获取端点注释的方法。共享整个代码没有意义,重要的事实是,来自该端点的响应如下所示 正如你所看到的,反应看起来不错,一切都很好 问题 现在,我有了Android应用程序,它使用改型与API进行通信。它向上述端点发出请求并获得响应(响应是Android 使用改装时,Firestore时间戳为(秒:0,纳秒:0),android,firebase,google-cloud-firestore,google-cloud-functions,retrofit,Android,Firebase,Google Cloud Firestore,Google Cloud Functions,Retrofit,我遇到了在Android应用程序中解析Firestore时间戳的问题 总结 在我的Firebase Firestore中,我有一组评论。每个评论都是这样的 (时间为时间戳类型) 我已经使用云函数构建了RESTAPI。有一个获取端点注释的方法。共享整个代码没有意义,重要的事实是,来自该端点的响应如下所示 正如你所看到的,反应看起来不错,一切都很好 问题 现在,我有了Android应用程序,它使用改型与API进行通信。它向上述端点发出请求并获得响应(响应是) 但是当我做Log.d(respons
)
但是当我做Log.d(response.body)
时,我得到了(我剪切了不重要的数据)
时间戳消失了。它不是空的,但它指向了那个时代的乞讨(1970年1月1日)。只有0秒,0纳秒。我不使用任何自定义转换器或任何东西,只是“初级改装”
好了,就这样。
我不知道为什么时间戳会变为0,0
如果有人能帮助我,我将非常感激。
提前感谢您。您假设改型知道如何基于服务器的默认JSON序列化来反序列化时间戳。它不知道怎么做。你得自己处理 当函数序列化时间戳时,它使用文档内容的默认序列化。它看着对象并说“嘿,有一个对象,所以为了序列化它,我将把它的所有属性复制到输出中”。如果您查看,您将看到它使用属性_秒和_纳秒来保存时间戳的组件。这就解释了您看到的JSON输出 在Java(或Kotlin)客户端,所有这些实际上都只是一个映射对象,类型信息也就消失了(这不会有什么帮助,因为JavaScript并不是简单地映射到Java)。没有人知道它是一个时间戳类型的对象。它所知道的就是有一个物体,它的秒数和纳秒数 您需要做的是在代码中添加一些智能(可能是以自定义转换器的形式进行改装的提示),以帮助它识别
time
JSON对象中的内容,并使用
或者,如果您不介意损失几纳秒的精度,只需让函数将时间戳转换为以毫秒为单位的时间,通过线路发送,然后让客户端简单地将其转换为java日期对象
您可能还希望根据JavaScript时间戳对象的内部详细信息停止。由于_秒和_纳秒实际上是私有的详细信息,因此您需要依赖于将来可能发生变化的内容。相反,请考虑使用公共方法GETBEST()和GETNANSOCOSDS()中的数据显式序列化函数中的时间戳。<代码>时间>代码>是JSONTROOL,包含“代码>秒< /代码>和<代码>毫微秒< /代码>键,谢谢这样详尽的响应。纳秒对我来说并不重要。我将在API响应中返回毫秒,并在客户端对其进行解析(到目前为止:)
import com.google.firebase.Timestamp
data class CommentResponse(
val placeId: String,
val userUid: String,
val userDisplayName: String,
val userPhotoUrl: String,
val time: Timestamp,
val text: String
)
[CommentResponse(placeId=opactwo, userUid=e09E...82, userDisplayName=Bartek Pacia, userPhotoUrl=https: .../photo.jpg, time=Timestamp(seconds=0, nanoseconds=0), text=This place is very beautiful :D)]