Firebase android获取对象的值不为null,但获取对象的属性返回null

时间:2018-08-02 05:12:32

标签: java android firebase firebase-realtime-database

这似乎是一个很容易解决的问题,但我竭尽全力想出什么问题了。我正在尝试查询数据库中的某个键,如果该键存在,则需要与该键关联的值。这是我的Firebase数据库,其中第一个节点是用户执行的操作。在此之前是根引用。 enter image description here

我正在尝试查询特定日期。这是我的代码

 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。

1 个答案:

答案 0 :(得分:0)

您的代码不起作用,因为Firebase SDK无法将Events节点的直接子级(看来是格式化的日期字符串)映射到类Event的字段中。它不会自动进入每个子节点并假设您要哪个子节点(至少有两个格式化的日期子节点显示)以及如何将它们映射到您的类中。

相反,您应该考虑迭代快照子项,然后根据需要将其映射到Event对象。