Android Volley中getInt()获取already_enrolled等整型字段返回错误值问题
问题根因及解决方案
1. 首要问题:缺失字段解析逻辑
你贴出的代码中完全没有对liked、already_enrolled两个字段的赋值逻辑,仅仅是在日志中打印了already_enrolled的值,没有将接口返回的对应值写入Subject实体类,实体类的这两个字段会保持初始化的默认值0,这是你取值始终为0的最直接原因。
2. 日志输出异常排查
你日志中id=8的对应already_enrolled打印值为0,和你贴出的接口响应不符,按以下步骤排查:
- 先在
onResponse回调第一行打印完整的接口响应内容,确认实际拿到的响应和你预期的一致:
Log.i("full_response", response.toString());
大概率是你请求携带的Authorization token无效,后端识别到未登录状态,直接返回了默认的未点赞、未报名状态(值为0)。
- 如果确认响应内容确实符合预期,两个字段值为1,那是Android内置org.json包的类型解析兼容问题,部分版本对接口返回的整型如果隐式转为字符串类型时,
getInt会返回默认值0,改用先取字符串再转整型的兼容写法即可。
最终修改代码
在解析循环中新增两个字段的解析逻辑即可:
// 放在其他字段赋值的位置,比如sbj.setEnrolleds之后即可 // 兼容写法适配所有情况 sbj.setLiked(Integer.parseInt(obj.optString("liked", "0"))); sbj.setAlready_enrolled(Integer.parseInt(obj.optString("already_enrolled", "0")));
内容的提问来源于stack exchange,提问作者Abdullah
相关产品推荐
相关产品推荐

