Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 改装客户端,带可选Gson转换器_Kotlin_Retrofit - Fatal编程技术网

Kotlin 改装客户端,带可选Gson转换器

Kotlin 改装客户端,带可选Gson转换器,kotlin,retrofit,Kotlin,Retrofit,我有一些API客户端,我想传入一个可选的Json解码器。例如,一些API以以下方式返回JSON: { "title": "Some Name", "more": "data" } { "key": { "title": "Some Name", "more": "data&q

我有一些API客户端,我想传入一个可选的Json解码器。例如,一些API以以下方式返回JSON:

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

太好了,谢谢