假设我正在使用这样的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>
如何变为长期?
当我试图让我的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对象中使用它来满足我的需求呢?
答案 0 :(得分:0)
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);
答案 1 :(得分:0)
当您在Firebase数据库中设置timestamp
时,将其设置为Map
,当您检索时,您将其检索为Long
。因此,您可以将该属性嵌套在一个更通用的HashMap<String, Object>
中,它可以作为单个长值(&#34; date&#34;,&#34; longValue&#34;)进入数据库。正如您所做的ServerValue.TIMESTAMP
,这是一个看起来像这样的HashMap :(&#34; date&#34;,{&#34; .sv&#34;,&#34; servertime&#34;})
要获得时间和日期,请使用以下方法重新命令:
String getTimeDate(long timeStamp){
try{
DateFormat dateFormat = getDateTimeInstance();
Date netDate = (new Date(timeStamp));
return dateFormat.format(netDate);
}
catch(Exception e){
return "date";
}
}
要获得使用以下方法重新命令您的日期:
String getDate(long timeStamp){
try{
DateFormat dateFormat = getDateInstance();
Date netDate = (new Date(timeStamp));
return dateFormat.format(netDate);
}
catch(Exception e){
return "date";
}
}