android - 无法使用改造将 json 数据映射到 pojo 类
问题描述
当我查看成功 API 响应时,它似乎正在发送数据,但数据无法加载到其相应的 Pojo 类,其中 ArrayList 的大小似乎为空。从我的角度来看,POJO 类结构似乎很好,但无法弄清楚问题所在。在这里,我提供了我的日志截图,它返回了 API 数据和我保留的用于查看 ArrayList 大小的日志:
API 响应:
{
"achievementList": [
{
"id": "somerandomuuid2",
"name": "Foodie",
"url": "https://toppng.com/uploads/preview/achievement-icon-icon-11553495882s4jdqrtwe2.png",
"rewardPoint": 50,
"description": "Order 500 Food items.",
"earnPoint": 500,
"userPoint": 450,
"achieved": false
},
{
"id": "somerandomuuid3",
"name": "Explorer",
"url": "https://toppng.com/uploads/preview/achievement-icon-icon-11553495882s4jdqrtwe2.png",
"rewardPoint": 50,
"description": "Book more than 100 tickets.",
"earnPoint": 100,
"userPoint": 0,
"achieved": false
}
],
"totalRewardPoints": 0
}
成就(POJO类)
data class Achievements(
@Json(name = "achievementList")
var achievementsList: ArrayList<AchievementsList>
)
data class AchievementsList(
@Json(name = "id")
var id: String?,
@Json(name = "name")
var name: String?,
@Json(name = "url")
var url: String?,
@Json(name = "rewardPoint")
var rewardPoint: Int?,
@Json(name = "description")
var description: String?,
@Json(name = "earnPoint")
var earnPoint: Int?,
@Json(name = "userPoint")
var userPoint: Int?,
@Json(name = "achieved")
var achieved: Boolean?
)
API服务
fun getUserAchievements(
context: AppCompatActivity,
userId: String,
listener: OnAchievementsListener
) {
APIClient.normalRequest.getUserAchievements(userId)
.enqueue(object : Callback<Achievements> {
override fun onFailure(call: Call<Achievements>, t: Throwable) {
listener.onFailure(ResponseCodes.badRequest, t.localizedMessage!!)
}
override fun onResponse(
call: Call<Achievements>,
response: Response<Achievements>
) {
when (response.code()) {
ResponseCodes.success -> {
Log.i("ProfileActivity: ", "Response: ${response.body()}")
response.body()?.let { listener.onSuccess(it) }
}
else -> {
when (response.code()) {
listener.onFailure(response.code(), "Something went wrong")
}
}
}
}
})
}
活动
private fun getAchievementsList() {
appPreferences?.getString(AppPreferences.UUID)?.let {
getUserAchievements(this, it, object : OnAchievementsListener {
override fun onFailure(code: Int, description: String) {
Utils.showToast(this@ProfileActivity, "$code, $description")
}
override fun onSuccess(achievements: Achievements?) {
Log.i(TAG, "Size: ${achievements?.achievementsList?.size}")
}
})
}
}
解决方案
尝试这个:
@SerializedName("achievementList")
代替
@Json(name = "achievementList")
在 POJO 类所有字段中
推荐阅读
- httpcookie - 服务器如何区分 FormsAuthenticationTicket cookie (C#)?
- docker - Kubernetes-Node 监控 Pod 并执行相关脚本
- html - 将背景图像从一个部分重叠到另一部分
- c++ - 如何将二维字符数组传递给函数?
- python - python新手:这是索引和切片吗?
- go - 拥有大量互斥锁有什么副作用吗?
- java - Selenium 程序不会停止运行
- javascript - 如何通过 FOR 循环进行此继续迭代。停留在索引 5
- r - 在 mycol 参数中使用 ifelse 正确分配颜色以突出显示 xyplot spaghetti plot 中的线的令人沮丧的问题
- postgresql - 使用 libpqxx 连接到 questDB