Данные из Firebase не отображались в RecyclerView - PullRequest
0 голосов
/ 22 сентября 2019

My RecyclerView не показывает никаких данных из Firebase.Я не вижу ошибок в logcat, поэтому не знаю почему.Я следовал руководству от YouTube видео.Но все равно ничего.Я использую Android 8.0 и API 27. Надеюсь, что кто-нибудь может помочь.

Мой основной код активности:

public class ViewProduct extends AppCompatActivity {

  DatabaseReference ref;
  ArrayList<Model> list;
  private RecyclerView recyclerView;
  private RecyclerView.Adapter viewHolder;
  private RecyclerView.LayoutManager layoutManager;
  SearchView searchView;



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

        ref = FirebaseDatabase.getInstance().getReference().child("buddymealplanneruser").
                child("Products");


        recyclerView = findViewById(R.id.stallproductRecyclerView);
        //recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        //SEARCH VIEW
        searchView = findViewById(R.id.searchProductStall);

        //ADAPTER
        list = new ArrayList<>();
        viewHolder = new ViewHolder(list);
        recyclerView.setAdapter(viewHolder);



    }

    @Override
    protected void onRestart() {
        super.onRestart();
        if (ref!=null)
        {
             ref.addValueEventListener(new ValueEventListener() {
                 @Override
                 public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                     if (dataSnapshot.exists())
                     {
                         //list = new ArrayList<>();
                         list.clear();
                         for(DataSnapshot ds : dataSnapshot.getChildren())
                         {

                             list.add(ds.getValue(Model.class));

                         }
                         //ViewHolder viewHolder = new ViewHolder(list);
                         //recyclerView.setAdapter(viewHolder);

                         viewHolder.notifyDataSetChanged();

                     }
                 }

                 @Override
                 public void onCancelled(@NonNull DatabaseError databaseError) {
                     Toast.makeText(ViewProduct.this, databaseError.getMessage(),
                             Toast.LENGTH_SHORT).show();
                 }
             });
        }
        if (searchView !=null)
        {
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String s)
                {
                    return false;
                }

                @Override
                public boolean onQueryTextChange(String s) {
                    search(s);
                    return true;
                }
            });
        }
    }

    private void search(String str) {
        ArrayList<Model> myList = new ArrayList<>();
        for(Model object : list)
        {
            if(object.getProductName().toLowerCase().contains(str.toLowerCase()))
            {
                myList.add(object);
            }
        }
        ViewHolder viewHolder = new ViewHolder(myList);
        recyclerView.setAdapter(viewHolder);


    }


}

Мой адаптер:

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


    ArrayList<Model> list;
    public ViewHolder (ArrayList<Model> list)
    {
        this.list=list;
    }




    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_product, viewGroup,false);

        return new MyViewHolder(view);


    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {

        myViewHolder.productName.setText(list.get(i).getProductName());
        myViewHolder.productCalorie.setText(list.get(i).getProductCalorie());
        myViewHolder.StallId.setText(list.get(i).getStallId());
        myViewHolder.productType.setText(list.get(i).getProductType());
        myViewHolder.productServing.setText(list.get(i).getProductServing());
        myViewHolder.statusProduct.setText(list.get(i).getStatusProduct());


    }

    @Override
    public int getItemCount()
    {

        return list.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder
    {
        TextView productName, productCalorie, StallId;
        TextView productType, productServing, statusProduct;
        ImageView productImageView;

        public MyViewHolder (@NonNull View itemView){
            super((itemView));

            productName = itemView.findViewById(R.id.productTitle);
            productCalorie = itemView.findViewById(R.id.productDescriptionCalorie);
            StallId = itemView.findViewById(R.id.productDescriptionStallId);
            productType = itemView.findViewById(R.id.productDescriptionType);
            productServing=itemView.findViewById(R.id.productDescriptionServing);
            statusProduct=itemView.findViewById(R.id.productDescriptionAvailibility);
            //productImageView = itemView.findViewById(R.id.productImageView);
        }


    }
}

Моя модель:

package com.example.buddymealplannerstall.Child;

import android.view.Display;

public class Model {

    //String  productName, productImage, productCalorie, StallId, productType, productServing, statusProduct;
    private String StallId;
    private String productCalorie;
    private String productImage;
    private String productName;
    private String productServing;
    private String productType;
    private String statusProduct;

    public Model (String StallId,
                  String productCalorie,
                  String productImage,
                  String productName,
                  String productServing,
                  String productType,
                  String statusProduct){

        this.StallId = StallId;
        this.productCalorie = productCalorie;
        this.productImage = productImage;
        this.productName = productName;
        this.productServing = productServing;
        this.productType = productType;
        this.statusProduct = statusProduct;

    }

    public Model(){

    }

    public String getStallId() {
        return StallId;
    }

    public void setStallId(String stallId) {
        StallId = stallId;
    }

    public String getProductCalorie() {
        return productCalorie;
    }

    public void setProductCalorie(String productCalorie) {
        this.productCalorie = productCalorie;
    }

    public String getProductImage() {
        return productImage;
    }

    public void setProductImage(String productImage) {
        this.productImage = productImage;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public String getProductServing() {
        return productServing;
    }

    public void setProductServing(String productServing) {
        this.productServing = productServing;
    }

    public String getProductType() {
        return productType;
    }

    public void setProductType(String productType) {
        this.productType = productType;
    }

    public String getStatusProduct() {
        return statusProduct;
    }

    public void setStatusProduct(String statusProduct) {
        this.statusProduct = statusProduct;
    }
}

Снимок экрана моего firebase и моих приложений.

firebase моего приложения

Ответы [ 2 ]

1 голос
/ 22 сентября 2019

Согласно вашему комментарию:

да, buddymealplanner - это название моего проекта

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

ref = FirebaseDatabase.getInstance().getReference().child("buddymealplanneruser").
            child("Products");

Просто на:

ref = FirebaseDatabase.getInstance().getReference().child("Products");
1 голос
/ 22 сентября 2019

Не думаю, что вы заполняете свой список, вы отправляете его пусто .Из того, что я вижу, вы добавляете элементы в список только при перезапуске действия.Попробуйте либо заполнить его перед отправкой списка, либо изменить onRestart () для onStart () или onResume () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...