Kotlin 改装客户端,带可选Gson转换器
我有一些API客户端,我想传入一个可选的Json解码器。例如,一些API以以下方式返回JSON:Kotlin 改装客户端,带可选Gson转换器,kotlin,retrofit,Kotlin,Retrofit,我有一些API客户端,我想传入一个可选的Json解码器。例如,一些API以以下方式返回JSON: { "title": "Some Name", "more": "data" } { "key": { "title": "Some Name", "more": "data&q
{
"title": "Some Name",
"more": "data"
}
{
"key": {
"title": "Some Name",
"more": "data"
}
}
和其他以以下方式返回数据:
{
"title": "Some Name",
"more": "data"
}
{
"key": {
"title": "Some Name",
"more": "data"
}
}
我想做的是传入一个可选的gson转换器
fun createService(): ApiInterface {
return buildService()
}
fun <T>createService(targetClass: Class<T>, key: String): ApiInterface {
targetClass: Class<T>
key: String
var gson: Gson = GsonBuilder()
.registerTypeAdapter(targetClass, RestDeserializer(targetClass, key))
.create()
return buildService(gson)
}
fun buildService(gson: Gson?): ApiInterface {
// build my builder
val retrofit = Retrofit.Builder()
.baseUrl(API_BASE_URL)
/// I WANT TO PASS gson here IF it exists..
.addConverterFactory(GsonConverterFactory.create(gson??)) <------- Pass in gson ONLY if it's not null??
.addConverterFactory(ScalarsConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.createAsync())
.addCallAdapterFactory(NetworkResponseAdapterFactory())
.client(client.build())
.build()
return retrofit.create(ApiInterface::class.java)
}
fun createService():api接口{
returnbuildservice()
}
fun createService(targetClass:Class,key:String):API接口{
目标类别:类别
关键字:字符串
var gson:gson=GsonBuilder()
.registerTypeAdapter(targetClass,RestDeserializer(targetClass,key))
.create()
返回构建服务(gson)
}
趣味建筑服务(gson:gson?):接口{
//构建我的构建器
val reformation=reformation.Builder()
.baseUrl(API_BASE_URL)
///如果存在的话,我想在这里通过gson。。
.addConverterFactory(GsonConverterFactory.create(gson???)我不确定我是否正确理解了您的问题。如果我理解了,您只需要进行空检查
fun-buildService(gson:gson?):api接口{
val reformationbuilder=reformation.Builder()
.baseUrl(API_BASE_URL)
if(gson!=null){
ReformationBuilder.addConverterFactory(GsonConverterFactory.create(gson))
}
val改装=改装生成器。
.addConverterFactory(ScalarsConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.createAsync())
.addCallAdapterFactory(NetworkResponseAdapterFactory())
.client(client.build())
.build()
返回reformation.create(apinterface::class.java)
}
太好了,谢谢