【问题标题】:kotlin get a simple message using retrofitkotlin 使用改造得到一个简单的消息
【发布时间】:2020-02-25 23:19:06
【问题描述】:

您好,我在这里遇到了大问题,这是我第一次使用改造,我是 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)
                }
            })
    }

没有 toast 消息显示,当我让我的 api 只返回一个字符串而不是 json 字符串时,我有一个错误显示,但现在我修复它时没有错误。

【问题讨论】:

  • 看不清楚,屏幕上有吐司吗?我的意思是,您的 onFailure 或 OnResponse 是否被调用?
  • 根本没有吐司回答
  • 可能是因为你还没有在ToastonResponse 函数中调用show
  • 谢谢@mightyWOZ 就是这样:)

标签: json kotlin retrofit


【解决方案1】:

您应该按照以下代码更改为您的改造客户端;

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")
    }

【讨论】:

    猜你喜欢
    • 2021-02-06
    • 1970-01-01
    • 2011-10-14
    • 2016-04-28
    • 1970-01-01
    • 2021-09-11
    • 2018-08-31
    • 2020-08-26
    • 1970-01-01
    相关资源
    最近更新 更多