java - 将适配器设置为回收器 View 时出现空指针异常

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

无法成功呈现回收站 View 。获取错误:

"java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setAdapter(android.support.v7.widget.RecyclerView$Adapter)' on a null object reference"

即使我已经设置了初始化 RecyclerView,设置线性布局并将其设置为适配器。谁能指出错误?

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

    toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    searchBar = (MaterialSearchBar) findViewById(R.id.searchBar);

    if(getIntent() != null ){
        if(getIntent().getStringExtra("categoryId") != null){
            categoryId = getIntent().getStringExtra("categoryId");
            fetchFoodList(categoryId);
        }
    }
    databaseReference = FirebaseDatabase.getInstance().getReference("foodlist");
    floatingActionButton = findViewById(R.id.food_list_fab);
    recyclerView = findViewById(R.id.food_recycler_view);

    final LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);

}

private void fetchFoodList(String categoryId) {
    Query query = FirebaseDatabase.getInstance().getReference("foodlist").orderByChild("MenuId").equalTo(categoryId);
    FirebaseRecyclerOptions<FoodModel> options = new FirebaseRecyclerOptions.Builder<FoodModel>().setQuery(query, new SnapshotParser<FoodModel>() {
        @NonNull
        @Override
        public FoodModel parseSnapshot(@NonNull DataSnapshot snapshot) {
            Log.d(TAG, "parseSnapshot: "+snapshot.child("Discount").getValue().toString());

            return new FoodModel(snapshot.child("Description").getValue().toString(), snapshot.child("Discount").getValue().toString(), snapshot.child("Image").getValue().toString(), snapshot.child("MenuId").getValue().toString(), snapshot.child("Name").getValue().toString(), snapshot.child("Price").getValue().toString());
        }
    }).build();

    FirebaseRecyclerAdapter firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<FoodModel, FoodViewHolder>(options) {
        @NonNull
        @Override
        public FoodViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
            LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
            View v = inflater.inflate(R.layout.food_items, viewGroup, false);
            return new FoodViewHolder(v);
        }

        @Override
        protected void onBindViewHolder(@NonNull FoodViewHolder holder, final int position, @NonNull FoodModel model) {
            holder.setFoodName(model.getName());
            Log.d(TAG, "onBindViewHolder: "+model.getImage());
            holder.setFoodImage(model.getImage());
            holder.setFoodDescription(model.getDescription());
        }
    };

    recyclerView.setAdapter(firebaseRecyclerAdapter);
}

最佳答案

要解决此问题,请移动以下代码行:

recyclerView = findViewById(R.id.food_recycler_view);

在这一行之后:

searchBar = (MaterialSearchBar) findViewById(R.id.searchBar);.

这样,RecyclerView对象在使用前会被初始化。

关于java - 将适配器设置为回收器 View 时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54559212/

相关文章:

java - 在Java中将字符串转换为字符数组?

java - 在 Java 中从 IAM 用户名获取 Amazon 访问 key 和 key

java - 在 Android 上写入外部 SD 卡的通用方法

android - 最新版本如何使用getdownloadurl?

java - 如何获取特定数据并将其用作从 firebase 中的另一个表获取另一个数据的键

javascript - Firebase Web 身份验证 - 服务器端怎么样?

java - Spring mvc 结果页面和后退浏览器按钮

java - 调用 Java 8 功能接口(interface)的最简洁的 Scala 方法是什么?

java - Libgdx |场景2d |点击隐形按钮时 touchDown 输入处理器方法不会触发

android - RTSP 媒体服务器解决方案