这似乎是一个很容易解决的问题,但我竭尽全力想出什么问题了。我正在尝试查询数据库中的某个键,如果该键存在,则需要与该键关联的值。这是我的Firebase数据库,其中第一个节点是用户执行的操作。在此之前是根引用。
我正在尝试查询特定日期。这是我的代码
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
reference.child(FirebaseMethods.getUserUid()).child("Events")
.orderByKey()
.equalTo(firebaseDate).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Event event = dataSnapshot.getValue(Event.class);
boolean isNull = event == null;
Log.i(TAG,"is null" + isNull);
Log.i(TAG,"uri " + event.getmImageUrl());
Log.i(TAG,"date " + event.getmDate());
//Log.i(TAG,event.getOutfit().)
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
其中FirebaseMethods.getUserUid()返回唯一的用户ID。问题是事件不为null,但是当我尝试获取事件内部的属性时,它们将返回null。
Event.java:
public class Event {
private String mDate;
private String mImageUrl;
private Outfit outfit;
public Event() {}
public Event(String mDate, String mImageUrl,Outfit outfit) {
this.mDate = mDate;
this.mImageUrl = mImageUrl;
this.outfit = outfit;
}
public void setmDate(String mDate) {
this.mDate = mDate;
}
public void setmImageUrl(String mImageUrl) {
this.mImageUrl = mImageUrl;
}
public String getmDate() {
return mDate;
}
public String getmImageUrl() {
return mImageUrl;
}
public Outfit getOutfit() {
return outfit;
}
}
不确定我的查询是否有问题?因为当我打印数据快照时,它给了我{key = Events,value = {23-08-2018,........}},它等于我给它的相同的firebaseDate。
答案 0 :(得分:0)
您的代码不起作用,因为Firebase SDK无法将Events
节点的直接子级(看来是格式化的日期字符串)映射到类Event
的字段中。它不会自动进入每个子节点并假设您要哪个子节点(至少有两个格式化的日期子节点显示)以及如何将它们映射到您的类中。
相反,您应该考虑迭代快照子项,然后根据需要将其映射到Event对象。