【问题标题】:How to make Firebase get data from inside push() keys?如何让 Firebase 从 push() 键中获取数据?
【发布时间】:2016-11-30 12:16:09
【问题描述】:

假设我有这个:

Campaigns:{
    UNIQUE_ID:{
     title: "Hello",
     description: "Desc"
  }
}

还有一堆其他UNIQUE_IDs,我想检索标题和描述并将它们放入RecyclerView


我尝试了什么:

我尝试使用字符串 descriptiontitle 制作自定义 Campaign 类。

我有这个方法:

 String title;
 String description;
 public Campaign(){}
 public Campaign(String title, String description) {
    this.title = title;
    this.description = description;
}
public String getTitle() {
    return title;
}

public String getDescription() {
    return description;
}

当我尝试使用此方法获取适配器时:

 RecyclerView.Adapter mAdapter = new FirebaseRecyclerAdapter<Campaign,CampaignHolder>(Campaign.class, R.layout.recyclerview_template, CampaignHolder.class,ref){
        @Override
        public void  populateViewHolder(CampaignHolder viewHolder, Campaign campaign, int position){
            viewHolder.setTitle(campaign.getTitle());
            viewHolder.setDescription(campaign.getDescription());
        }
    };

campaign.getTitle() 显然返回了null,我明白为什么,因为我从未调用过构造函数。但是,如果我想调用构造函数,我需要参数title,description。但是我从哪里得到这个,还是我做错了?

【问题讨论】:

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


    【解决方案1】:

    您的 Campaign 类将需要任何一个 setter(除了您已经拥有的 getter):

    public class Campaign {
         String title;
         String description;
         public Campaign(){}
         public Campaign(String title, String description) {
            this.title = title;
            this.description = description;
        }
        public String getTitle() {
            return title;
        }
        public void setTitle(title) {
            this.title = title;
        }
    
        public String getDescription() {
            return description;
        }
        public void setDescription(description) {
            this.description = description;
        }
    
    }
    

    或者,只需公开字段并删除 getter/setter:

    public class Campaign {
         public String title;
         public String description;
         public Campaign(){}
         public Campaign(String title, String description) {
            this.title = title;
            this.description = description;
        }    
    }
    

    基于这些公共字段(或 getter/setter),Firebase 数据库客户端将根据从数据库中读取的 JSON 自动填充数据。

    【讨论】:

    • 但是等等,在我的 ViewHolder 中我有二传手。有区别吗?
    • 而且,如果我正在实施你的第二种方法,我什至会打电话给Campaign(title,description)吗?
    • 您不需要做任何事情,firebase-ui 会自动为您映射,然后将其作为参数传递给populateViewHolder() 方法@AbAppletic
    • 标题仍然是null,即使按照你说的做了
    • 您确定ref 指向.child("Campaigns") 吗?并且模型类中的字段名称与您的 firebase 数据库中的键匹配?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 2017-09-03
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    相关资源
    最近更新 更多