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
相关产品推荐
相关产品推荐

