在Android Studio 3.5上无法从Firebase检索数据

时间:2019-12-03 13:22:26

标签: java android firebase firebase-realtime-database android-recyclerview

  

此处是屏幕截图,这是此活动的结果,我已经使用上载功能在firebase上添加了一些数据,它在视图中仅显示空白。

Screenshot Image Here

Database rule screenshot

Database data screenshot

  

这是“活动”,我曾在youtube上参考过该教程,但无法从Firebase检索到我的项目中的数据。当我查看列表时,它仅显示为空白,有人帮助我。

public class RecipeList extends AppCompatActivity {

    RecyclerView mRecyclerView;
    List<FoodData> myFoodList;
    FoodData mFoodData;

    ValueEventListener eventListener;
    private DatabaseReference databaseReference;

    ProgressDialog progressDialog;

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

        mRecyclerView = (RecyclerView)findViewById(R.id.recycleView);
        GridLayoutManager gridLayoutManager = new GridLayoutManager(RecipeList.this,1);
        mRecyclerView.setLayoutManager(gridLayoutManager);

        progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("Loading Items");

        myFoodList = new ArrayList<>();

        final MyAdapter myAdapter = new MyAdapter(RecipeList.this,myFoodList);
        mRecyclerView.setAdapter(myAdapter);

        databaseReference = FirebaseDatabase.getInstance().getReference("Recipe");
        progressDialog.show();


        eventListener = databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                //myFoodList.clear();

                for(DataSnapshot itemSnapshot:dataSnapshot.getChildren()){

                    FoodData foodData = itemSnapshot.getValue(FoodData.class);
                    myFoodList.add(foodData);
                }
                myAdapter.notifyDataSetChanged();
                progressDialog.dismiss();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                progressDialog.dismiss();
            }
        });

    }
}
  

这是适配器

    public class MyAdapter extends RecyclerView.Adapter<FoodViewHolder>{

        private Context mContex;
        private List<FoodData> myFoodList;

        public MyAdapter(Context mContex, List<FoodData> myFoodList) {
            this.mContex = mContex;
            this.myFoodList = myFoodList;
        }

        @NonNull
        @Override
        public FoodViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

            View mView = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycleview_layout,parent,false);
            return new FoodViewHolder(mView);
        }

        @Override
        public void onBindViewHolder(@NonNull final FoodViewHolder holder, int position) {

        Glide.with(mContex).load(myFoodList.get(position).getItemIamge()).into(holder.imageView);

        holder.title.setText(myFoodList.get(position).getItemNme());
        holder.description.setText(myFoodList.get(position).getItemDescription());

        holder.mCardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(mContex, detailRecipe.class);
                intent.putExtra("Image",myFoodList.get(holder.getAdapterPosition()).getItemIamge());
                intent.putExtra("Description",myFoodList.get(holder.getAdapterPosition()).getItemDescription());
                //intent.putExtra("keyValue",myFoodList.get(holder.getAdapterPosition()).getKey());
                mContex.startActivity(intent);
            }
        });
        }

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

        public void filteredList(ArrayList<FoodData> filterList) {

            myFoodList= filterList;
            notifyDataSetChanged();
        }
    }

class FoodViewHolder extends RecyclerView.ViewHolder {

    ImageView imageView;
    TextView title,description;
    CardView mCardView;

    public FoodViewHolder(@NonNull View itemView) {
        super(itemView);
        imageView = itemView.findViewById(R.id.ivImage);
        title = itemView.findViewById(R.id.title);
        description = itemView.findViewById(R.id.description);

        mCardView = itemView.findViewById(R.id.cardView);
    }
}

1 个答案:

答案 0 :(得分:0)

请将此代码发布到您的onDataChange中:

final MyAdapter myAdapter = new MyAdapter(RecipeList.this,myFoodList);
mRecyclerView.setAdapter(myAdapter);

根据您的代码,您刚刚向适配器提供了一个空列表。

eventListener = databaseReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        //myFoodList.clear();

        for(DataSnapshot itemSnapshot:dataSnapshot.getChildren()){

            FoodData foodData = itemSnapshot.getValue(FoodData.class);
            myFoodList.add(foodData);
        }
        final MyAdapter myAdapter = new MyAdapter(RecipeList.this,myFoodList);
        mRecyclerView.setAdapter(myAdapter);
        myAdapter.notifyDataSetChanged();
        progressDialog.dismiss();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        progressDialog.dismiss();
    }
});