You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发FoodListAdapter.getItemCount空指针异常排查求助

问题原因及修复方案

直接崩溃原因

报错指向getItemCount里的foodList.size(),本质是你构造FoodListAdapter时传入的foodList为null,根源在RestaurantMenuActivity的执行顺序错误:
你在onCreate中先给drinkList赋值后就调用了initRecyclerView(),此时全局的foodList还未赋值,默认是null,传入Adapter后调用size()就触发了空指针。

修复步骤

  • 调整onCreate中的执行顺序,给两个列表都赋值后再初始化RecyclerView,同时加非空兜底:
    把原来的代码
    drinkList = restaurantModel.getDrinks();
    initRecyclerView();
    
    foodList = restaurantModel.getFoods();
    initRecyclerView();
    
    替换为
    drinkList = restaurantModel.getDrinks();
    foodList = restaurantModel.getFoods();
    // 兜底逻辑,防止数据源返回空
    if(drinkList == null) drinkList = new ArrayList<>();
    if(foodList == null) foodList = new ArrayList<>();
    // 只需要调用一次初始化即可
    initRecyclerView();
    
  • 给Adapter加空判断从根源避免这类崩溃,修改FoodListAdapter的getItemCount方法:
    @Override
    public int getItemCount() { 
        return foodList == null ? 0 : foodList.size(); 
    }
    
    建议给DrinkListAdapter也加上相同的非空判断,避免后续饮品列表为空时出现同类崩溃。
  • 修复购物车列表空指针隐患:你全局定义的List<Foods> itemsInCartList1没有初始化,后续点击食品加购时调用add方法也会触发空指针,在onCreate中补充初始化:
    itemsInCartList1 = new ArrayList<>();
    
    同时修改食品加购方法里的空判断逻辑,把onAddToCartClick(Foods food)中针对itemsInCartList的判断改成对应食品购物车的判断:
    // 原逻辑判断的是饮品购物车列表,属于逻辑错误
    if(itemsInCartList1 == null) {
        itemsInCartList1 = new ArrayList<>();
    }
    
  • 修复RecyclerView多Adapter问题:当前你给同一个RecyclerView先后设置了两个Adapter,饮品列表的Adapter会被完全覆盖,看不到饮品数据。如果要同时展示两类数据,建议拆成两个独立的RecyclerView,或者使用多类型Adapter、ConcatAdapter合并两个列表的展示逻辑。

内容的提问来源于stack exchange,提问作者rebel2theworld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:24:04