Я пытаюсь получить ответ 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()
}
}
}
}
Что я делаю неправильно?
В соответствии с редактированием, которое я сделал вчера, пожалуйста, постарайтесь писать здесь техническую сторону.
Пожалуйста, поделитесь версиями retrofit & okhttp, которые вы используете. Проверьте и обновите дооснащение 2.6.0
и okhttp до 4.4.0
, если вы используете предыдущую версию.
Я использую дооснащение 2.5.0
.
Это не ваша проблема, но не создавайте CoroutineScope, если вы не собираетесь хранить его в свойстве и отменять его где-нибудь еще. Используйте lifecycleScope
или viewModelScope
.
Не могли бы вы помочь мне с кодом.
см. stackoverflow.com/questions/28371305/…