Read and show database FIrebase in Recycler View

0

I'm still a novice in this. I have connected the app with the Realtime Database of Firebase and I want to show the data in the Recycler View, I put the dataSnapshot.getValue(Comida.class); and then I notify the Recycler View of the change but the data is not displayed.

MainActivity

package com.example.usuario.realtimebbdd;

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.example.usuario.realtimebbdd.adapter.MyAdapter;
import com.example.usuario.realtimebbdd.model.Comida;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private EditText editTextNombre;
    private EditText editTextPrecio;
    private TextView textViewNombre;
    private TextView textViewPrecio;
    private Button btnGuardar;

    private List<Comida> comidas;

    private MyAdapter mAdapter;
    private RecyclerView mRecyclerView;
    private RecyclerView.LayoutManager mLayoutManager;
    private DatabaseReference mDatabase;


    // Rama para la bbdd en Firebase
    private static final String PATH_FOOD = "food";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

         getComidas();

        editTextNombre = findViewById(R.id.editTextNombre);
        editTextPrecio = findViewById(R.id.editTextPrecio);
        textViewNombre = findViewById(R.id.textViewNombre);
        textViewPrecio = findViewById(R.id.textViewPrecio);
        btnGuardar = findViewById(R.id.btnGuardar);

        btnGuardar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Comida comida = new 
                    Comida(editTextNombre.getText().toString().trim(),
                    editTextPrecio.getText().toString().trim());

                // Nos colocamos en la rama 'food'
                mDatabase = 
                FirebaseDatabase.getInstance().getReference(PATH_FOOD);
                mDatabase.push().setValue(comida);

                editTextNombre.setText("");
                editTextPrecio.setText("");
            }
        });

        mRecyclerView = findViewById(R.id.recyclerView);
        mLayoutManager = new LinearLayoutManager(this);
        mAdapter = new MyAdapter(comidas, R.layout.recycler_view_item, new 
        MyAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(Comida comida, int position) {

            }
        });

        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setAdapter(mAdapter);

    }

    private void getComidas(){
        mDatabase = FirebaseDatabase.getInstance().getReference(PATH_FOOD);
        mDatabase.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, 
            @Nullable String s) {
                final Comida comida = dataSnapshot.getValue(Comida.class);
                comida.setId(dataSnapshot.getKey());
                if (!comidas.contains(comida)){
                    comidas.add(comida);
                }

                mRecyclerView.getAdapter().notifyDataSetChanged();
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, 
            @Nullable String s) {

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, 
            @Nullable String s) {

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

    }
}

Adapter Class

package com.example.usuario.realtimebbdd.adapter;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.usuario.realtimebbdd.R;
import com.example.usuario.realtimebbdd.model.Comida;

import java.util.List;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{

    private List<Comida> comidas;
    private int layout;
    private OnItemClickListener itemClickListener;

    public MyAdapter(List<Comida> comidas, int layout, OnItemClickListener 
    itemClickListener) {
        this.comidas = comidas;
        this.layout = layout;
        this.itemClickListener = itemClickListener;
    }

    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup 
    viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(layout, 
        viewGroup, false);
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(@NonNull MyAdapter.ViewHolder viewHolder, 
    int position) {
        viewHolder.bind(comidas.get(position), itemClickListener);
    }

    @Override
    public int getItemCount() {
        return comidas.size();
    }


    public class ViewHolder extends RecyclerView.ViewHolder {
        public TextView textViewNombre;
        public TextView textViewPrecio;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            this.textViewNombre = 
            itemView.findViewById(R.id.textViewNombre);
            this.textViewPrecio = 
            itemView.findViewById(R.id.textViewPrecio);
        }

        public void bind (final Comida comida, final OnItemClickListener 
        itemClickListener){
            textViewNombre.setText(comida.getNombre());
            textViewPrecio.setText("$" + comida.getPrecio());
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    itemClickListener.onItemClick(comida, 
                    getAdapterPosition());
                }
            });
        }
    }

    public interface OnItemClickListener{
        void onItemClick(Comida movie, int position);
    }


}

Model class

package com.example.usuario.realtimebbdd.model;

public class Comida {

    private String id;
    private String nombre;
    private String precio;

    public Comida() {
    }

    public Comida(String nombre, String precio) {
        this.id = id;
        this.nombre = nombre;
        this.precio = precio;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getPrecio() {
        return precio;
    }

    public void setPrecio(String precio) {
        this.precio = precio;
    }


}
    
asked by Juan 02.11.2018 в 12:09
source

0 answers