改造响应体! Kotlin 安卓工作室

Posted

技术标签:

【中文标题】改造响应体! Kotlin 安卓工作室【英文标题】:retrofit response.body!! Kotlin android studio 【发布时间】:2022-01-01 14:34:33 【问题描述】:

我在用 Kotlin 改造时遇到问题,代码如下:

MainActivity.kt

 val apiInterface = ApiInterface.create().getCountry()
        apiInterface.enqueue( object : Callback<List<data>>
            override fun onResponse(call: Call<List<data>>?, response: Response<List<data>>?) 
                if(response?.body() != null)
                    val adapter = ArrayAdapter(this@MainActivity,android.R.layout.simple_spinner_item,response.body()!!)

                    binding.spCountry.adapter=adapter //spCountry is a spinner
                
            
            override fun onFailure(call: Call<List<data>>?, t: Throwable?) 
        )

ApiInterface.kt

interface ApiInterface 
    @GET("/v3.1/all")
    fun getCountry() : Call<List<data>>
    companion object 
        var BASE_URL = "https://restcountries.com/v3.1/all/"
        fun create() : ApiInterface 
            val retrofit = Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(BASE_URL)
                .build()
            return retrofit.create(ApiInterface::class.java)
        
    

数据.kt

data class data(
    @SerializedName("name") val name: name
)
data class name(
    @SerializedName("common") val common: String
)

我得到的结果是微调器中的这个,我只想要国家/地区的名称

【问题讨论】:

所以你想把你的List&lt;data&gt;转换成List&lt;String&gt;,对吧? 是的,我想在微调器中显示它 【参考方案1】:

您可以执行一个简单的map 操作将您的List&lt;data&gt; 转换为List&lt;String&gt;

val originalList: List<data> = // Response from retrofit
val newList: List<String> = originalList.map  it.name.common 

try it yourself

【讨论】:

以上是关于改造响应体! Kotlin 安卓工作室的主要内容,如果未能解决你的问题,请参考以下文章

如何将改造回调响应中的回调从 java 转换为 Kotlin

在 Kotlin 中为成功和错误处理两种不同的改造响应

在 MVVM 架构中格式化来自改造 API 的嵌套 JSON 响应 - Kotlin

改造:来自 gson 转换体的原始响应体

改造回调获取响应体

改造 2 - 空响应体