Android / Kotlin: GSON неправильно анализирует некоторые поля JSON - PullRequest
0 голосов
/ 10 июля 2019

GSON неправильно анализирует мой JSON и возвращает null только для некоторых полей.
Действительно, я правильно получаю за каждые doctor rpps и code, но у меня есть null для lifenId, firstName и lastName.
У меня есть JSON, который представляет собой список doctor выглядит так:

[
    {
        "lifenId": "238536",
        "rpps": "10002732211",
        "firstName": "Yolande ",
        "lastName": "Couffinhal",
        "email": null,
        "postalCode": null,
        "city": null,
        "address": null,
        "code": "Médecin Neuro-psychiatrie ",
        "phone": null
    },
...
]

Я уверен, что мой JSON правильный, потому что JSON, который я получаю, является именно тем, который я публикую здесь, поэтому эти значения не равны нулю (например, я не говорю о телефоне, который null в JSON)
Я попытался вручную разобрать JSON, чтобы получить firstName и lastName, это работает (очевидно, потому что у меня есть хороший JSON, но я хотел быть уверен в этом)

Вот мой data class Doctor:

data class Doctor(var phone: String,
                  var code: String,
                  var address: MutableList<String>,
                  var email: String,
                  var rpps: String,
                  var city: String,
                  var lastName: Any,
                  var firstName: Any,
                  var lifenId: String,
                  var postalCode: String) {
}  

Мой запрос:

fun getDoctorsByName(name: String, token: String): Single<List<Doctor>> {
        val url = "lifen/name/" + name
        return repository.getDoctorsByName(url, token).compose(schedulerProvider.getSchedulersForSingle())
    }  

как я отношусь к возвращению:

disposable.add(viewModel.getDoctorsByName(search_bar.query.toString(), activity.token)
                    .doOnError {
                        Toast.makeText(activity, it.message, Toast.LENGTH_SHORT).show()
                    }
                    .subscribe(
                        { doctors ->
                            /*val list = ArrayList<Doctor>()
                            val doc = Doctor("", "","","","",doctors[0]["lastName"] as String,doctors[0]["firstName"] as String,"","") parse manually here
                            list.add(doc)
                            adapter.updateList(list)*/
                            adapter.updateList(doctors)
                            Toast.makeText(activity, "LIST COMPLETED", Toast.LENGTH_SHORT).show()
                        }, Throwable::printStackTrace
                    )

                )

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Я обнаружил ошибку, когда я создаю GSON клиент, я помещаю фильтр следующим образом:

fun provideGson(): Gson {
        return GsonBuilder()
            .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
            .create()
    }

, поэтому я просто удалил этот фильтр, поэтому на lifenId,firstName и lastName, GSON не получили эти поля.

0 голосов
/ 10 июля 2019

firstName и lastName имеют значение Any в вашем классе данных.Измените их на String, и вы должны быть хорошими.Также, если они иногда равны нулю, отметьте их как обнуляемые и проверьте при доступе к ним.

...