Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用改装时,Firestore时间戳为(秒:0,纳秒:0)_Android_Firebase_Google Cloud Firestore_Google Cloud Functions_Retrofit - Fatal编程技术网

Android 使用改装时,Firestore时间戳为(秒:0,纳秒:0)

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

我遇到了在Android应用程序中解析Firestore时间戳的问题

总结 在我的Firebase Firestore中,我有一组评论。每个评论都是这样的

(时间为时间戳类型)

我已经使用云函数构建了RESTAPI。有一个获取端点注释的方法。共享整个代码没有意义,重要的事实是,来自该端点的响应如下所示

正如你所看到的,反应看起来不错,一切都很好

问题 现在,我有了Android应用程序,它使用改型与API进行通信。它向上述端点发出请求并获得响应(响应是

但是当我做
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)]