Search code examples
androidfirebasefirebase-realtime-databaseandroid-recyclerviewfirebaseui

Issue getting firebase to recyclerview android. No data showing up


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

}

Solution

  • Remove the following for the data to appear:

    recipes.setHasFixedSize(true);
    

    Refer to this:

    https://github.com/firebase/FirebaseUI-Android/issues/204