FirebaseRecyclerAdapter 未调用 onBindViewHolder 且未显示数据

FirebaseRecyclerAdapter not calling onBindViewHolder and not displaying data

我正在尝试使用 FirebaseRecyclerAdapter 在 RecyclerView 的屏幕上显示数据,但未显示任何数据。我已经使用调试模式确定在将新项目添加到列表时没有调用 onBindViewHolder,但它被正确地添加到数据库中。我查看了整个 Stack Overflow,none 已发布的解决方案有所帮助。

这是我的数据库的结构:

这是我的片段代码:

    package com.jggdevelopment.wannacook.fragments;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatDelegate;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.auth.FirebaseAuth;
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 com.google.firebase.database.Query;
import com.jggdevelopment.wannacook.AddItemDialogFragment;
import com.jggdevelopment.wannacook.InventoryAdapter;
import com.jggdevelopment.wannacook.InventoryItem;
import com.jggdevelopment.wannacook.MyViewHolder;
import com.jggdevelopment.wannacook.R;

import java.util.ArrayList;

/**
 * Handles actions taken inside the "Fridge" tab of the app.
 * Created by Cameron on 1/18/2018.
 */

public class FridgeFragment extends Fragment {

    private ArrayList<InventoryItem> items = new ArrayList<>();
    private static final String TAG = "FridgeFragement";
    private FirebaseRecyclerAdapter<InventoryItem, FridgeHolder> firebaseRecyclerAdapter;
    private RecyclerView rvItems;

    public FridgeFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_fridge, container, false);
        DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference("/users");

        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);

        String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
        Query query = rootRef.child(uid).child("fridge");

        //Lookup recycler view in activity layout
        rvItems = view.findViewById(R.id.fridge_list);

        // Set layout manager to position the items
        rvItems.setLayoutManager(new LinearLayoutManager(getContext()));



        FirebaseRecyclerOptions<InventoryItem> options = new FirebaseRecyclerOptions.Builder<InventoryItem>()
                .setQuery(query, InventoryItem.class)
                .build();

        firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<InventoryItem, FridgeHolder>(options) {
            @NonNull
            @Override
            public FridgeHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.inventory_card, parent, false);

                return new FridgeHolder(view);
            }

            @Override
            protected void onBindViewHolder(@NonNull FridgeHolder holder, int position, @NonNull InventoryItem item) {
                super.onBindViewHolder(holder, position);
                holder.setItem(item);
                Log.d("TAG", item.getItemName());
            }


        };


        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);

        return view;
    }

    @Override
    public void onStart() {
        super.onStart();
        firebaseRecyclerAdapter.startListening();
        rvItems.setAdapter(firebaseRecyclerAdapter);
    }

    @Override
    public void onStop() {
        super.onStop();

        if (firebaseRecyclerAdapter != null) {
            firebaseRecyclerAdapter.stopListening();
        }
    }

    private class FridgeHolder extends RecyclerView.ViewHolder {

        private final ImageView image;
        private final TextView itemName;
        private final TextView itemQuantity;

        public FridgeHolder(View itemView) {
            super(itemView);

            image = itemView.findViewById(R.id.item_photo);
            itemName = itemView.findViewById(R.id.item_name);
            itemQuantity = itemView.findViewById(R.id.item_quantity);
        }

        public void setItem(InventoryItem item) {
            itemName.setText(item.getItemName());
            itemQuantity.setText(item.getQuantity());
        }
    }
}

完整代码可在 Github 此处找到:https://github.com/jollygreenegiant/WannaCook

您是否确保您的数据库安全规则正确并且登录的用户有权读取该路径?如果您确实遇到权限问题,您应该会在日志中看到 com.google.firebase.database.DatabaseException

在您的根查询中,您有 /users。删除 /.