Невозможно получить ответ JSON с помощью Retrofit и Coroutines в Android

Я пытаюсь получить ответ JSON с сервера с помощью retrofit2 и сопрограмм, но получаю ошибку ниже.

java.lang.IllegalArgumentException: No Retrofit annotation found. (parameter #3)

Ниже мой ответ в формате JSON:

{
  "msg": "Digi"
}

Вот мой код:

RetrofitClient.kt

object RetrofitClient{

var BASE_URL:String = "http://myurl.com/"
val getClient:ApiService

get(){
    val gson = GsonBuilder().setLenient().create()
    val interceptor = HttpLoggingInterceptor()
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY)
    val client = OkHttpClient.Builder().addInterceptor(interceptor).build()
    val retrofit = Retrofit.Builder().baseUrl(BASE_URL).client(client)
        .addConverterFactory(GsonConverterFactory.create(gson)).build()
    return retrofit.create(ApiService::class.java)
  }
}

ApiService.kt

interface ApiService {

@POST("login")
@FormUrlEncoded
suspend fun signinUser(
    @Field("email") email: String?,
    @Field("password") password: String?
): Response<LoginResponse>
}

LoginResponse.kt

data class LoginResponse(
 @Expose
 @SerializedName("msg")
 var msg:String?
)

В приведенном ниже коде я получаю сообщение об ошибке

val resp = RetrofitClient.getClient.signinUser(mail,password)

SignIn.kt

 private fun signinUser(mail:String,password:String){

    CoroutineScope(Dispatchers.IO).launch {

        val resp = RetrofitClient.getClient.signinUser(mail,password)

        withContext(Dispatchers.Main){

            if (resp.isSuccessful){

                val items = resp.body()

                if (items != null){
                   val message = items.msg
                    message?.let { Log.d("res", it) }
                }
            }
            else{
                Toast.makeText(applicationContext,"error",Toast.LENGTH_SHORT).show()
              }
          }
      }
  }

Что я делаю неправильно?

см. stackoverflow.com/questions/28371305/…

Thorny84 30.03.2021 18:16

В соответствии с редактированием, которое я сделал вчера, пожалуйста, постарайтесь писать здесь техническую сторону.

halfer 30.03.2021 18:17

Пожалуйста, поделитесь версиями retrofit & okhttp, которые вы используете. Проверьте и обновите дооснащение 2.6.0 и okhttp до 4.4.0, если вы используете предыдущую версию.

SaadAAkash 30.03.2021 18:20

Я использую дооснащение 2.5.0.

Digvijay 30.03.2021 18:21

Это не ваша проблема, но не создавайте CoroutineScope, если вы не собираетесь хранить его в свойстве и отменять его где-нибудь еще. Используйте lifecycleScope или viewModelScope.

Tenfour04 30.03.2021 18:56

Не могли бы вы помочь мне с кодом.

Digvijay 30.03.2021 18:57
3
6
22
0

Другие вопросы по теме