在Kotlin中改进实现 – 方法默认参数
我正在尝试在Kotlin中 实现Android的Retrofit的入门 。 我已经创建了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中实现?
reposForUser
方法需要两个参数:一个String
和一个Callback
,但是你只提供String
:
client.reposForUser("fs-opensource")
你可以通过这样做让你的回调“可选”:
fun reposForUser(@Path("user") user: String, callback: Callback<List<GitHubRepo>>? )
我在回调类型后面添加了一个问号,以便说:这是一个可为空的参数。 如果你甚至想说, 没有回调是默认的 ,也使得客户端调用更方便,我建议你提供一个callback
的默认值,如下所示:
fun reposForUser(@Path("user") user: String, callback: Callback<List<GitHubRepo>>? = null)
请注意,您现在需要以安全的方式访问callback
,因为它可能为空。 在这里阅读。
- 匕首注入超类和子类
- 尝试使用Dagger2和Kotlin将ViewModelProvider注入到Activity时出错
- 詹金斯:Android项目未能建立(生成数据绑定/匕首类失败)
- 无法转换为org.jetbrains.kotlin.java.model.types.JeClassInitializerExecutableTypeMirror
- Kotlin错误:匕首不支持注入私人领域
- Retrofit2 + Kotlin中的SimpleXML:MethodException:注释必须标记一个set或get方法
- 如何在Kotlin中使用Dagger的2 @Named限定符
- 用匕首使用Kotlin
- 来自Retrofit的POST请求以意想不到的方式工作