Java数据模型对象中的Firebase ServerValue.TIMESTAMP

mki*_*kim 9 android firebase

我是Firebase的新手,到目前为止我一直非常喜欢它.我遇到了问题; 我正在使用类似于教程大纲的FirebaseListAdapter:https://github.com/firebase/AndroidChat

要使用FirebaseListAdapter,我需要使用数据模型对象(以使自动绑定工作得很好).问题是我还想保留该模型对象的时间戳值,并且我想从Firebase服务器获取时间戳.

我目前没有工作的是一个类DataModelObject(类似于演示示例中的com.firebase.androidchat.Chat),其构造函数如下:

DataModelObject(String data1, String data2, Map enQTimeStamp)
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用这样:

DataModelObject dmo = new DataModelObject ("foo", "bar", ServerValue.TIMESTAMP);
myFirebaseRef.push().setValue(dmo);
Run Code Online (Sandbox Code Playgroud)

当我尝试运行该代码时,这会导致JsonMappingException.我在这里找到了一个代码片段:

https://www.firebase.com/blog/2015-02-11-firebase-unique-identifiers.html

但是值得注意的是,在Android代码示例的第4行,这将导致编译时错误(因为他试图将ServerValue.TIMESTAMP放入Map中,而TIMESTAMP是Map本身)

正确的方法是什么,并保持与FirebaseListAdapter的兼容性?

Kev*_*eil 20

这听起来类似于这个问题:在Firebase中制作POJO时,你能使用ServerValue.TIMESTAMP吗?

当创建用于存储/检索除默认空构造函数之外的数据的POJO时,我通常使用类似于此的构造函数:

Param param1;
Param param2;
HashMap<String, Object> timestampCreated;

//required empty constructor
public DataObject(){}

public DataObject(Param param1, Param param2) {
       this.param1 = param1;
       this.param2 = param2;
       HashMap<String, Object> timestampNow = new HashMap<>();
       timestampNow.put("timestamp", ServerValue.TIMESTAMP);
       this.timestampCreated = timestampNow;
}
Run Code Online (Sandbox Code Playgroud)

确保包含用于存储时间戳的HashMap <>的getter:

public HashMap<String, Object> getTimestampCreated(){
    return timestampCreated;
}
Run Code Online (Sandbox Code Playgroud)

然后使用@Exclude批注创建一个getter,您可以在代码中使用该getter来获取时间戳的值(如果需要).@Exclude注释将导致Firebase忽略此getter而不查找相应的属性

@Exclude
public long getTimestampCreatedLong(){
    return (long)timestampCreated.get("timestamp");
}
Run Code Online (Sandbox Code Playgroud)


Mob*_*Mon 11

这是我如何做到的

//member variable
Object createdTimestamp;

public YourConstructor(){
    createdTimestamp = ServerValue.TIMESTAMP
}

@Exclude
public long getCreatedTimestampLong(){
    return (long)createdTimestamp;
}
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于在db中保存时间戳,因为你没有getter (7认同)