【问题标题】:Retrofit implementation in Kotlin - Method Default ParameterKotlin 中的改造实现 - 方法默认参数
【发布时间】:2018-01-29 03:23:53
【问题描述】:

我正在尝试在 Kotlin 中实现这个 getting started with Retrofit for Android。我已经创建了Retrofit 类的实例,但是当我尝试在接口中调用端点方法时,Kotlin 似乎并不喜欢它没有回调参数。这是所有相关代码。

数据类:

data class GitHubRepo(val id:Int,val name:String)

界面:

interface GitHubClient {
@GET("/users/{user}/repos")
fun reposForUser(@Path("user") user: String,callback: Callback<List<GitHubRepo>> )
}

改造实施:

    val httpClient = OkHttpClient.Builder()

    val builder = Retrofit.Builder().baseUrl(API_BASE_URL)
                                    .addConverterFactory(GsonConverterFactory.create())

    val retrofit = builder.client(httpClient.build()).build()

    val client = retrofit.create(GitHubClient::class.java)

    val call =  client.reposForUser("fs-opensource") <-- Error - No value passed for parameter 'callback'

来自教程:

您不会将回调作为最后一个参数传递。您使用 客户端获取调用对象。一旦你在 已创建调用对象,请求将由 Retrofit 发出

如何在 Kotlin 中实现这一点?

【问题讨论】:

    标签: android kotlin retrofit2


    【解决方案1】:

    reposForUser 方法需要两个参数:StringCallback,但您只提供 String

     client.reposForUser("fs-opensource")
    

    您可以通过这样做使您的回调“可选”:

    fun reposForUser(@Path("user") user: String, callback: Callback<List<GitHubRepo>>? )
    

    我在您的回调类型后面添加了一个问号,以便说明:这是一个 可为空 参数。如果你甚至想说,那个no回调是默认,也让客户端调用更方便,我建议你给callback提供一个默认值,像这样:

    fun reposForUser(@Path("user") user: String, callback: Callback<List<GitHubRepo>>? = null)
    

    请注意,您现在需要以安全的方式访问callback,因为它可能为空。阅读here

    【讨论】:

    • 我知道'?'可以为空的东西,但是你是如何在第二行代码中使“回调”参数成为可选的?
    • 你的意思是:“回调:回调>?= null”?回调是可空的,默认为空,所以你可以通过省略第二个参数来调用方法
    猜你喜欢
    • 1970-01-01
    • 2022-07-24
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 2016-01-06
    • 2017-04-08
    • 2020-12-08
    相关资源
    最近更新 更多