RecyclerView适配器中getItemCount()返回null致应用崩溃求助
解决RecyclerView适配器getItemCount()导致的崩溃问题
嘿,我来帮你搞定这个崩溃问题!首先咱们得理清根源:错误提示“movies item size in getItemCount() returns null”本质是因为你在getItemCount()里直接调用了movieList.size(),但movieList可能为null,这时候调用size()会触发空指针异常,而RecyclerView要求这个方法必须返回合法的int值,不能出现null相关的异常情况。
看你的适配器代码,构造函数直接把传入的movieList赋值给成员变量,但如果外部调用适配器时传入null(比如API返回数据为空、解析出错导致列表为null),这个成员变量就会是null,进而引发崩溃。
给你几个靠谱的解决方案,建议组合使用来双重保险:
方案1:在构造函数中初始化空列表,杜绝null
修改适配器构造函数,确保成员变量movieList永远不会是null:
public MoviesAdapter(Context context, List<Movie> movieList) { this.context = context; // 若传入列表为null,则初始化空ArrayList this.movieList = movieList != null ? movieList : new ArrayList<>(); }
这样不管外部传什么,内部列表都有合法实例,调用size()就不会崩溃了。
方案2:在getItemCount()中做null判断
直接在getItemCount()方法里处理null情况,返回0当列表为null时:
@Override public int getItemCount() { // 列表不为null返回实际大小,否则返回0 return movieList != null ? movieList.size() : 0; }
这个方法能直接规避空指针,RecyclerView拿到0就知道没有数据要展示,不会崩溃。
方案3:从源头确保传入的列表不为null
在调用适配器的地方提前处理API返回的数据:
// 假设这是你从API获取的电影列表 List<Movie> movies = apiResponse.getMovies(); // 若API返回null,替换为空列表 if (movies == null) { movies = new ArrayList<>(); } // 再创建适配器 MoviesAdapter adapter = new MoviesAdapter(context, movies);
从源头避免传入null,也是很有效的防护手段。
建议至少同时使用方案1和方案2,这样不管是外部传入null,还是后续操作中不小心把列表置为null,都能保证getItemCount()正常返回int值,彻底避免崩溃。
内容的提问来源于stack exchange,提问作者Sherif Alaa
相关产品推荐
相关产品推荐

