Пользовательский адаптер Моши - PullRequest
0 голосов
/ 24 апреля 2020

Я использую 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
...