Я использую moshi v1.9.2, я пытаюсь создать собственный адаптер, используя Moshi, где moshi игнорирует json, например "1588320": false
, и возвращает объект в противном случае
the json Я получаю
{
"infos": {
"1588318": {
"id": 1588318,
"id_user": 9701,
"profile_name": "Profile1",
"views": 100,
...
},
"1588319": {
"id": 1588319,
"id_user": 7391,
"profile_name": "Profile2",
"views": 10,
...
},
"1588320": false
...
}
}
Мой класс
data class UserInfo(val infos: Map<String, UserInfoCard>)
data class UserInfoCard(val id: String,
@Json( name = "id_user") val idUser: String,
@Json( name = "profile_name") val profileName: String,
val views: Int)
Мой файл модернизации / Моши
private val moshi = Moshi.Builder()
.add(UserInfoAdapter())
.add(KotlinJsonAdapterFactory())
.build()
private val retrofit = Retrofit.Builder()
.addConverterFactory(MoshiConverterFactory.create(moshi))
.addCallAdapterFactory(CoroutineCallAdapterFactory())
.baseUrl(BASE_URL)
.build()
object MyApi {
val retrofitService : MyApiService by lazy {
retrofit.create(MyApiService::class.java) }
}
Я думал о создании Адаптера как такового:
class UserInfoAdapter {
@FromJson
fun fromJson(jsonReader: JsonReader): UserInfoCard {
Log.d("UserInfoAdapter", "got $jsonReader.")
if(jsonReader.peek() == JsonToken.BOOLEAN) jsonReader.skipValue()
return UserInfoCard("1","2","3","4")
}
}
Я нашел это сообщение , которое можно было бы сравнить, но я не мог заставить его работать.
Когда я пытаюсь запустить приложение, я получаю эту ошибку
Caused by: java.lang.IllegalArgumentException: Platform class android.util.JsonReader requires explicit JsonAdapter to be registered