RecyclerView无法加载服务端JSON数据 报ArrayOutOfBoundIndex异常
问题定位
- 核心错误:Model类中非法创建Activity实例,数据存入了错误对象
你在PrisonerModel.fromJson()方法中手动new MainActivity()是完全错误的用法:Android的Activity实例由系统负责创建调度,你手动new出来的实例和当前正在运行的MainActivity实例毫无关联,存入ma.inside1的数据根本不会同步到Activity onCreate方法中初始化的那个inside1列表,所以Activity层面的inside1始终是空列表,访问下标自然抛出ArrayOutOfBoundIndex异常。 - 异步任务逻辑不匹配,没有通知列表刷新
你在onCreate中先启动异步请求,再初始化inside1,就算异步请求拿到了正确数据,也没有把解析结果写入Activity对应的inside1列表,更没有调用Adapter的notifyDataSetChanged()方法通知RecyclerView刷新,数据自然不会显示。 - Model层解析逻辑存在缺陷
你当前贴出的代码中pm1.fromJson(jsonArray)、pm1.x都没有对应的实现定义,同时把Activity实例传入Model层操作属性也不符合分层架构规范,Model层只负责数据解析,应该把解析完成的列表结果返回给调用层,不要在Model层操作Activity的属性。
修复建议
- 删掉Model类里所有创建MainActivity实例、操作Activity属性的代码,修改
fromJson方法,把解析得到的PrisonerModel列表作为返回值返回。 - 在异步任务的
onPostExecute回调里,把解析得到的列表数据添加到Activity的inside1中,再调用Adapter的notifyDataSetChanged()方法刷新列表。 - 所有访问
inside1下标的位置,先判断列表长度是否大于要访问的下标,避免越界异常。
内容的提问来源于stack exchange,提问作者JASIM CHOUHAN
相关产品推荐
相关产品推荐

