假设我正在使用这样的POJO:
public class Pojo {
String name;
//Others
Map<String, String> time; //As this is a Map<String,String>
//Constructors, getters, setters etc.
}
现在我要上传到firebase
Button b = findViewById(R.id.button_upload);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Pojo pojo = new pojo;
pojo.setName(getName());
pojo.setTimeStamp(ServerValue.TIMESTAMP); //Is this right?
String id = pojoFirebaseDatabase.push().getKey();
shortcut.setId(id);
shortcutDatabase.child(id).setValue(pojo);
}
}
这些对我来说似乎都是正确的。但是当我在实时数据库中看到时,我发现其中只有一个长(
"time" : 123456789
)。 Map<String,String>
如何更改为long?另外,当我尝试恢复我的pojo时(我正在使用Firebase-UI):
fbUIRecyclerAdapter =
new FirebaseRecyclerAdapter<Pojo, PojoViewHolder>(myOptions) {
@Override
public PojoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.pojo_view, parent, false);
return new PojoViewHolder(v);
}
@Override
protected void onBindViewHolder(PojoViewHolder pView, int position, Pojo pojo) {
pView.setName(pojo.getName());
shortcutView.setTimestamp(shortcut.getTimeStamp());
}
我有一个例外:
com.google.firebase.database.DatabaseException: Expected a Map while deserializing, but got a class java.lang.Long
对我来说似乎足够合理。因为数据库中只有很长的一段,但是我要在我的
Map<String, String>
中要求一个Pojo.class
。那么我该如何解决呢?如何在我的Pojo对象中获取较长的时间以根据需要使用它?
最佳答案
1.将地图添加到您的代码Map<String, String> time = new HashMap<>();
2.将值放入地图time.put("time",ServerValue.TIMESTAMP);
3.设置为Pojo pojo.setTimeStamp(time);
尝试这个 。
// add map
Map<String, String> time = new HashMap<>();
time.put("time",ServerValue.TIMESTAMP);
// edited here ,change Pojo
Pojo pojo = new Pojo();
pojo.setName(getName());
// edited here
pojo.setTimeStamp(time);