0

Скажем, у меня есть это:Как заставить Firebase получить данные из внутренних клавиш push()?

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

и кучу других UNIQUE_ID с, и я хочу, чтобы получить название и описание и поместить их в RecyclerView.


Что я пробовал:

Я попытался сделать пользовательский класс кампании, со струнами description и title.

И у меня есть этот метод:

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. Но где я получу это, или я делаю это неправильно?

Примечание: Если я не ясно, к чему я старался быть, тогда сообщите мне о том, чего не хватает, прежде чем вы опустили его, чтобы ваш downvote был достоин и помогал сообществу.

ответ

1

Вашего класс Campaign потребуется либо сеттера (в дополнении к добытчикам у вас уже есть):

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; 
    } 

} 

или альтернативно, просто сделать поле общественности и удалить геттеры/сеттер:

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

На основе этих открытых полей (или геттеров/сеттеров) клиент базы данных Firebase автоматически заполняет данные на основе JSON, который он считывает из базы данных.

+0

Но подождите, в моем ViewHolder у меня есть сеттеры. Есть ли разница? –

+0

И если я реализую свой второй метод, могу ли я даже позвонить в «Кампания (название, описание)»? –

+0

вам не нужно ничего делать, firebase-ui автоматически отображает это для вас, а затем передаёт его как параметр в методе 'populateViewHolder()' @AbAppletic – Wilik