我正在尝试在 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'
从教程:
您没有将回调作为最后一个参数传递。你用的是 客户端获取调用对象。一旦你调用了.enqueue就可以了 创建调用对象请求将由Retrofit
创建
如何在Kotlin中实现此功能?
答案 0 :(得分:2)
reposForUser
方法需要两个参数:String
和Callback
,但您只提供String
:
client.reposForUser("fs-opensource")
你可以进行回调&#34;可选&#34;通过这样做:
fun reposForUser(@Path("user") user: String, callback: Callback<List<GitHubRepo>>? )
我在回调的类型后面添加了一个问号,以便说明:它是可以为空的参数。如果你甚至想说,没有回调是默认,同时也让客户端调用更方便,我建议您为{{{{}提供默认值1}},像这样:
callback
请注意,您现在需要以安全的方式访问fun reposForUser(@Path("user") user: String, callback: Callback<List<GitHubRepo>>? = null)
,因为它可能为空。阅读here。