假设我使用这样的 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);
}
}
这些对我来说似乎都是正确的。但是当我查看实时数据库时,我发现其中只有一个 long ( "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
我觉得这很合理。因为数据库中只有 long,但我要求在我的 Map<String, String>
中提供 Pojo.class
。
那么我该如何解决这个问题呢?如何获取 Pojo 对象中的 long 来满足我的需求?
1.将 map 添加到您的代码 Map<String, String> time = new HashMap<>();
2.将值放入 map 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);
我是一名优秀的程序员,十分优秀!