android - 从 firebase 检索 hashmap 以填充 FirebaseRecycler,null HashMap

标签 android firebase firebase-realtime-database android-recyclerview firebaseui

我正在尝试从 Firebase 检索 HashMap 来填充我的 Firebase RecyclerView 下面是我尝试检索的模型类:

public class Employee{
private HashMap<String, Person> PeopleMap; 
// =  new HashMap<String, Person>();

public Employee () {
}

public Employee(HashMap<String, Person> people) {
    this.PeopleMap= people;
}

public HashMap<String, Person> getMap() {
    return PeopleMap;
}
public void setMap(HashMap<String, Person> people) {
    this.PeopleMap= people;
}
}

人员类别

public class Person {
private String ImageUrl;
private  String Name;
private String  Pay;
public Person() {
}

public Person(String name, String imageUrl, String pay, 
 ) {
    ImageUrl = imageUrl;
    Name = name;
    Pay = pay;

}

public String getImageUrl() {
    return ImageUrl;
}

public void setImageUrl(String imageUrl) {
    ImageUrl = imageUrl;
}

public String getName() {
    return Name;
}

public void setName(String name) {
    Name = name;
}

public String getPay() {
    return Pay;
}

public void setPrice(String pay) {
    Pay= pay;
}
}

现在的问题是,当我在 firebase 回收器中检索我的 Employe 模型类时,它不为空,但是如果我从那里检索我的 Hashmap,则 map 的大小为零,而下面的 map 上有项目就是我正在做的

Firebase REycler

        @Override
        protected void onBindViewHolder( ConvoViewHolder holder,  int 
        position,  Employee model) {
            if (model.equals(null)){
                Toast.makeText(OrderConversation.this, "object is null", 
                Toast.LENGTH_SHORT).show();
            }
            else
            {
                HashMap<String, OrderItem> cartitems =  model.getCart();
                int i = cartitems.size();
             if (i==0)
                    {
                        Toast.makeText(OrderConversation.this, "null 
                        map", Toast.LENGTH_SHORT).show();
                    }
                    else {
                        Toast.makeText(OrderConversation.this, "size of 
                        map in bind"+ Integer.toString(i),
                        Toast.LENGTH_SHORT).show();
                    }
            }
        }
    };
    mEmpList.setAdapter(adapter);
    adapter.startListening();

我的数据库结构如下所示,以员工为父节点,

enter image description here

抱歉,我不得不输入它,我希望每个人都清楚我拥有什么样的 str。我想从部门节点检索,以便我可以获得两个对象(DHead1 和 Dhead2 ),它们中的元素数量不同,因为 Dhead 有 3 个 person 类对象,而 Dhead2 有 2 个对象。所以我可以采取的一种方法是首先将它们加载到列表中,然后使用它们或我现在使用的其他方式,即将它们作为包含 person 类对象的映射的对象进行检索。

我在下面尝试了这个,我得到的值很好,但在 onbindview 中它不起作用

mDatabase.addValueEventListener(new ValueEventListener() {
             @Override
             public void onDataChange(DataSnapshot dataSnapshot) {
                 for(DataSnapshot ds: dataSnapshot.getChildren()){
                     GenericTypeIndicator<Map<String, Person>> to = new 
                     GenericTypeIndicator<Map<String, Person>>() {};
                     Map<String, Person> map = ds.getValue(to);
                     for(Person ml:convoModels.values()) {
                         String name = ml.getName();
                         Toast.makeText(context, "name is "+ name, 
                         Toast.LENGTH_SHORT).show();
                     }
                   }
              }
             @Override
             public void onCancelled(DatabaseError databaseError) {
             }
         });

最佳答案

您没有得到任何东西,因为模型类中的字段与数据库中的字段不同。看,在您的数据库中您有 imageUrl,在您的模型类中您有 ImageUrl。请记住,当您使用名为 getImageUrl() 的 getter 时,Firebase 将搜索名为 imageUrl 而不是 ImageUrl 的字段。解决问题的关键是更改字段的名称,以便它可以以小写字母开头,如下所示:

private String imageUrl;
private  String name;
private String  pay;

编辑:另请参阅使用 Employee 类的正确方法。

public class Employee {
    private HashMap<String, Person> peopleMap;

    public Employee() {}

    public Employee(HashMap<String, Person> peopleMap) {
        this.peopleMap = peopleMap;
    }

    public HashMap<String, Person> getPeopleMap() {
        return peopleMap;
    }
}

关于android - 从 firebase 检索 hashmap 以填充 FirebaseRecycler,null HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51642880/

相关文章:

java - 如何使用 Firebase 查询 equalTo(value, key)?

ios - 为什么我的 UIView de 在删除观察者后第一次没有初始化,但之后却初始化了?

android - 更新PlayService版本为12.0.0后无法运行应用

java - 尝试使用 Reference.orderByChild() 从 Firebase 中的实时数据库获取数据时出错

javascript - 如何在 React.JS 中有条件地添加路由?

android - 当我在 Android Studio 中按下 Run Android Application 按钮时,我可以运行 checkstyle

java - Android Studio 给了我 BuildConfig 错误

android - Robolected 传感器事件模拟

android - 当抽屉导航打开时将 mainActivity 推到一边

angular - 如何根据属性从firestore检索用户