kotlin получить простое сообщение, используя модернизацию - PullRequest
0 голосов
/ 25 февраля 2020

Здравствуйте, у меня большие проблемы, это мой первый раз, когда я использую модификацию, и я новичок в kotlin, я не знаю, почему этот кусок кода не работает.

Это моя модернизация клиент

    private const val BASE_URL = "https://89a6t4gtke.execute-api.eu-west-3.amazonaws.com/Prod/"

    val instance : IApi by lazy{
        val retrofit = Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
        retrofit.create(IApi::class.java)
    }

Это мой класс ответа

data class DefaultResponse(val message: String) {}

Это мой ответ:

    {
        "message": "GET"
    }

Интерфейс

    interface IApi {
        @GET("hello")
        fun returnHello():Call<DefaultResponse>
    }

Вызов

    toast_button.setOnClickListener{
        RetrofitClient.instance
            .returnHello()
            .enqueue(object: Callback<DefaultResponse>{
                override fun onFailure(call: retrofit2.Call<DefaultResponse>, t: Throwable) {
                    Toast.makeText(context,t.message + "bla",Toast.LENGTH_SHORT).show()
                }

                override fun onResponse(call: retrofit2.Call<DefaultResponse>,response: Response<DefaultResponse>) {
                    Toast.makeText(context, "empty?",Toast.LENGTH_SHORT)
                }
            })
    }

Никаких сообщений о тостах не было, однажды у меня было сообщение об ошибке, когда я заставлял свой API просто возвращать строку, а не строку json, но теперь нет ошибки, поскольку я исправил ее.

1 Ответ

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

Вы должны перейти к своему клиенту Retrofit следующим образом:

class RetrofitClient {
        companion object {
            fun getClient(): Retrofit {
                return Retrofit.Builder()
                    .addConverterFactory(GsonConverterFactory.create())
                    .baseUrl("https://89a6t4gtke.execute-api.eu-west-3.amazonaws.com/Prod/")
                    .build()
            }
        }
    }

Затем добавьте это в свою деятельность;

 val service = RetrofitClient.getClient().create(IApi::class.java)
 val call = service.returnHello()

val resp: DefaultResponse? = call.clone().execute().body()
    if (resp != null) {
        println("your response is -> $resp")
    }
...