【问题标题】:Retrieve a hashmap from firebase to populate FirebaseRecycler, null HashMap从 firebase 检索 hashmap 以填充 FirebaseRecycler,null HashMap
【发布时间】:2019-01-09 14:11:36
【问题描述】:

我正在尝试从 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 recycler 中检索我的 Employe 模型类时,它不为空,但如果我从那里检索我的 Hashmap,则地图的大小为零,而下面的地图上有项目是我正在做的

Firebase REyler

        @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();

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

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

我在下面尝试了这个,我得到的值很好,但是在 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) {
             }
         });

【问题讨论】:

  • This 是一种推荐的方式,您可以通过这种方式从 Firebase 实时数据库中检索数据并使用 FirebaseRecyclerAdapter 将其显示在 RecyclerView 中。
  • @AlexMamo 我想从 firebase 检索一个 Employee 模型对象。我正在遵循相同的步骤,但我的模型对象包含一个哈希图,我想使用该哈希图,但我的模型类在这里返回 null 为什么是
  • 我已将我的 Person 类对象存储在 firebase 中,我想从 firebase 的节点下检索这些对象的列表。有没有其他方法可以从 firebase 获取对象(内部包含对象列表)
  • 在这种情况下,请添加您的数据库结构。
  • 我已经更新了,请看看你能不能帮忙,对不起,我现在没有系统,否则我会上传确切的结构,但我试图简化它

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


【解决方案1】:

您什么也得不到,因为模型类中的字段与数据库中的字段不同。看,在你的数据库中你有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;
    }
}

【讨论】:

  • 应用程序在调用值后立即崩溃,它显示在空对象上调用 size() 时出错
  • 这也是之前的行为?
  • 是的,我确定我的模型类有问题,但现在我认为当我从数据库中调用值时,这些值不会作为模型类对象的哈希图出现
  • 您的代码中的问题是model.getCart() 返回null,这也是因为您的模型类错误。您的模型应该看起来像我更新的答案。现在可以用了吗?
  • 尝试在空对象引用上调用虚拟方法 'boolean java.util.HashMap.equals(java.lang.Object)' 仍然是同样的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 2013-12-19
  • 2011-12-31
  • 2013-03-08
  • 1970-01-01
  • 2015-03-23
相关资源
最近更新 更多