我是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)
| 归档时间: |
|
| 查看次数: |
24270 次 |
| 最近记录: |