I am unable to have my Firebase data show up in my RecyclerView. I am able to add data from my other activities to my Firebase Database, I am just having problems seeing the data in my RecyclerView.
I have created a FriebaseRecyclerAdapter that takes Recipe.class and my RecipeViewHolder. My ViewHolder takes three parts if my class (name, rating, and description). I am not receiving any helpful errors in Logcat.
RecipeList.class
public class RecipeList extends AppCompatActivity {
private RecyclerView recipes;
private FloatingActionButton newRecipeBtn;
private DatabaseReference mRecipeDatabase;
private RecyclerView.LayoutManager mLayoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recipe_list);
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
mRecipeDatabase = FirebaseDatabase.getInstance().getReference("Recipes");
newRecipeBtn = findViewById(R.id.fab);
recipes = findViewById(R.id.recyclerView);
recipes.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
recipes.setLayoutManager(mLayoutManager);
recipes.setItemAnimator(new DefaultItemAnimator());
recipes.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
FirebaseRecyclerAdapter<Recipe, RecipeViewHolder> adapter = new FirebaseRecyclerAdapter<Recipe, RecipeViewHolder>(
Recipe.class,
R.layout.recycler_list_item,
RecipeViewHolder.class,
mRecipeDatabase
) {
@Override
protected void populateViewHolder(RecipeViewHolder viewHolder, Recipe model, int position) {
viewHolder.setName(model.getName());
viewHolder.setRating(model.getRating());
viewHolder.setDescription(model.getDescription());
}
};
recipes.setAdapter(adapter);
}
public void toRecipeAdd(View view){
Intent intent = new Intent(RecipeList.this, RecipeAdd.class);
startActivity(intent);
}
public static class RecipeViewHolder extends RecyclerView.ViewHolder{
TextView text_name, text_rating, text_description;
public RecipeViewHolder(View itemView){
super(itemView);
text_name = itemView.findViewById(R.id.recipeNameTextView);
text_rating = itemView.findViewById(R.id.recipeRatingTextView);
text_description = itemView.findViewById(R.id.recipeDescriptionTextView);
}
public void setName(String name){
text_name.setText(name);
}
public void setRating(String rating){
text_rating.setText(rating);
}
public void setDescription(String description){
text_description.setText(description);
}
}
}
Recipe.Class
public class Recipe {
public String name;
public String url;
public String rating;
public String description;
public String id;
public String ingredients, instruction;
public Recipe(){}
public Recipe(String id, String name, String url, String rating, String description,
String ingredients, String instruction) {
this.id = id;
this.name = name;
this.url = url;
this.rating = rating;
this.description = description;
this.ingredients = ingredients;
this.instruction = instruction;
}
public Recipe(String name, String rating, String description){
this.name = name;
this.rating = rating;
this.description = description;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getRating() {
return rating;
}
public void setRating(String rating) {
this.rating = rating;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getIngredients() {
return ingredients;
}
public void setIngredients(String ingredients) {
this.ingredients = ingredients;
}
public String getInstruction() {
return instruction;
}
public void setInstruction(String instruction) {
this.instruction = instruction;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
Remove the following for the data to appear:
recipes.setHasFixedSize(true);
Refer to this: