Android: получение ответа «200 в порядке», но модернизация не удалась - PullRequest
0 голосов
/ 12 октября 2019

Я отправляю массив JSON с Retrofit2, но когда я публикую его, я получаю ответ "200 Ok" и вызывается метод onFailed для модификации. И он говорит: «Ожидается BEGIN_ARRAY, но в строке 1 путь 2 столбца $ $ STRING»

Успешно ли я отправил JSON в WebService? Если он успешен, то почему не работает RetrofitМой массив JSON выглядит так:

[{"Date":"2019-01-01T00:00:00","Duration":"25","Type":1,"Number":"53201","id":0,"isDataSent":false,"Name":"test isim","phoneNumber":"5554242422"}]

Я тестировал JSON с PostMan. Это нормально.

Мой запрос на модернизацию, подобный этому:

RetrofitClient.getClient()
            .postCallModel(list)
            .enqueue(object : Callback<List<CallLogModel>>{
                override fun onFailure(call: Call<List<CallLogModel>>, t: Throwable) {
                    Log.d(tag,"Retrofit Failed!")
                    Log.d(tag,call.toString())
                    Log.d(tag,t.message)
                }

                override fun onResponse(call: Call<List<CallLogModel>>, response: Response<List<CallLogModel>>
                ) {
                    Log.d(tag,"Retrofit Succeeded!")
                    Log.d(tag,response.message())
                }
            })

Есть ли эксперт, который может мне помочь с этим?

Мой класс модели:

@Entity(tableName = "supportCallLog")
data class CallLogModel(
@SerializedName("Name")
val userName: String,
@SerializedName("phoneNumber")
val userPhone: String,
@SerializedName("Number")
val customerPhone: String,
@SerializedName("Time")
val callDuration: String,
@SerializedName("Type")
val callType: Int,
@SerializedName("Date")
val callDate: String,
var isDataSent : Boolean
){
@PrimaryKey(autoGenerate = true)
var id : Int = 0
 }

Мой модифицированный интерфейс:

interface RetrofitService {
@POST("api")
fun postCallModel(@Body callLogModel: List<CallLogModel>) : Call<List<CallLogModel>>
   }

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

Я решил проблему с помощью @ CommonsWare. Я публикую json, но мне нужно обработать ответ от веб-службы. И веб-сервис возвращает String. Поэтому я изменил тип возврата моего postCallModel ()

Старый тип возврата был таким:

Call<List<CallLogModel>>

И я изменил его на:

Call<Any>

Сейчасмне не нужно беспокоиться о том, какой тип ответа возвращает веб-сервис.

0 голосов
/ 12 октября 2019

Ваш POST правильный, поэтому вы получаете 200. Но проблема в вашем ответе от сервера. Он ожидает array, но получает object, что приводит к этой ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...