РАЗМЕЩЕНИЕ пользовательского объекта с проблемой Retrofit2 - PullRequest
1 голос
/ 15 февраля 2020

В настоящее время я делаю свое первое приложение Android для проекта и не могу решить следующую проблему. (Я провел много исследований, но ничего подобного не нашел)

2020-02-15 11:41:30.075 10337-10337/com.example.quickmatch I/SigninFragmentViewModel: Required value 'surname' missing at $post 

Я пытаюсь опубликовать этот пользовательский объект на своем внутреннем сервере онлайн:

@JsonClass(generateAdapter = true)
data class PlayerObject(
        val id : Int?,
        @Json(name = "surname") val surname : String,
        @Json(name = "first_name") val firstName : String,
        val pseudo : String,
        @Json(name = "mdp") val password : String,
        @Json(name = "mail_address") val mailAddress : String,
        @Json(name = "phone_number") val phoneNumber : String?,
        @Json(name = "scored_goals") val scoredGoals : Int,
        @Json(name = "conceded_goals") val concededGoals : Int,
        @Json(name = "matches_played") val matchesPlayed : Int,
        val victories : Int,
        val avatar : String?,
        val bio : String?
)

I Я использую Retrofit2 и Moshi с сопрограммами:

implementation "com.squareup.retrofit2:retrofit:2.5.0"
implementation "com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2"
implementation "com.squareup.retrofit2:converter-moshi:2.5.0"

Вот мой экземпляр Retrofit:

/* Create Moshi object which will parse the responses */
private val moshi = Moshi.Builder()
        .add(KotlinJsonAdapterFactory())
        .build()

/* Retrofit builder with converter for response and base url */
private val retrofit = Retrofit.Builder()
        .addConverterFactory(MoshiConverterFactory.create(moshi))
        .addCallAdapterFactory(CoroutineCallAdapterFactory())
        .baseUrl(BASE_URL)
        .build()

Чтобы отправить свой запрос POST, я сделал этот метод (Он должен отправить меня обратно игроку создан в случае успеха):

@POST("...")
fun addPlayer(@Body player: PlayerObject) : Deferred<PlayerObject>

И я называю это передачей этого объекта:

var newPlayerObject = PlayerObject(null, name, firstName, pseudo, password, mailAddress, phoneNumber, 0, 0, 0, 0, null, null )

Я получаю ненулевые значения из EditTexts с основанием c binding.editText.text.toString() Большая проблема заключается в том, что я регистрировал каждое значение (имя, фамилию и т. Д. c ...) как в моем ViewModel до запроса, так и в моем пользовательском интерфейсе в кнопке onClickListener, которая вызывает ViewModel, и все выглядит нормально и соответствует тому, что Я набираю в Редактировать, но когда приложение публикует, кажется, что каждый атрибут объекта установлен в нуль. Поскольку surname не обнуляется, я получаю предыдущую ошибку. Я попытался сделать его обнуляемым, и это та же проблема со следующими атрибутами. Также обратите внимание, что передача объекта с каждым атрибутом null работает.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

Я наконец исправил эту проблему. Проблема была создана полем phone_number, которое я хотел сделать необязательным. В самом деле, когда соответствующий EditText был пустым при публикации, значение было установлено не null, а что-то "пустое" (не просто ""), что объясняет ошибку синтаксического анализа. Поэтому я просто добавил условие, чтобы установить это поле на null, если EditText не заполнен.

0 голосов
/ 16 февраля 2020

Я обнаружил, что указание целей использования сайта полезно для полей в Kotlin классе данных.

Что произойдет, если вы попытаетесь изменить свои аннотации в следующем формате?

@field:Json(name = "surname") val surname : String

...