Reputation: 149
As I viewed the success API response, it seems it is sending the data but the data could not load to its corresponding Pojo class, where the size of ArrayList seems null. The POJO class structure seems fine from my side but could not figure out what the problem is. Here I've provided my log screenshot which returned the API data and the Log I kept to view the ArrayList size:
API Response:
{
"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
}
Achievements (POJO Class)
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?
)
APIService
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")
}
}
}
}
})
}
Activity
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}")
}
})
}
}
Upvotes: 0
Views: 488
Reputation: 1670
Try this:
@SerializedName("achievementList")
instead of
@Json(name = "achievementList")
in POJO class all field
Upvotes: 1