我正在尝试从 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();
我的数据库结构如下所示,以员工为父节点,
抱歉,我不得不输入它,我希望每个人都清楚我拥有什么样的 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/