首页 > 解决方案 > Firebase android获取对象的值不为null,但获取对象的属性返回null

问题描述

这似乎是一个相当容易解决的问题,但我正在绞尽脑汁想知道出了什么问题。我正在尝试在数据库中查询某个键,如果该键存在,我想要与该键关联的值。这是我的 firebase 数据库,其中第一个节点是用户所做的。在此之前是根 ref。在此处输入图像描述

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

 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。问题是事件不为空,但是当我尝试获取事件内部的属性时,它们返回我为空。

事件.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 相同。

标签: javaandroidfirebasefirebase-realtime-database

解决方案


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

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


推荐阅读