使用 Retrofit 从 Json 将数组解析为 Recycler 视图

Parse an Array into a Recycler view from Json with Retrofit

你好,我正在通过改造和回收视图练习我的 kotlin 技能,我在一些 JSON 我为我的练习找到的数据中发现了这种类型的数据

"capital":[
          "Montevideo"

]

我知道这是一个数组,我能够通过在我的数据中声明 class 资本是这样的列表来将它解析到我的 Recyler 视图:

data class Country(

    val name: Name,
    val cioc: String,
    val independent: Boolean,
    val region: String,
    val capital: List<String>
)

data class Name(
    val common: String,
    val official: String,

)

我像这样在我的适配器中使事情正常

class CountryAdapter(val countries: List<Country>): RecyclerView.Adapter<CountriesViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CountriesViewHolder {

        val view = LayoutInflater.from(parent.context).inflate(R.layout.recyclerline, parent, false)
        return CountriesViewHolder(view)
    }

    override fun getItemCount(): Int {
        return countries.size
    }

    override fun onBindViewHolder(holder: CountriesViewHolder, position: Int) {
        return holder.bind(countries[position])

    }
}

class CountriesViewHolder(itemView : View): RecyclerView.ViewHolder(itemView){
    private val officialName: TextView = itemView.findViewById(R.id.titulo)
    private val independent: TextView = itemView.findViewById(R.id.titulo2)
    private val capital: TextView = itemView.findViewById(R.id.titulo3)





    fun bind(country: Country) {

        //Integer.parseInt

      //  val sum = (user.id + user.id).toString()
        officialName.text = country.name.official //user.address.geo.lat + " / " + user.address.geo.lng
        independent.text = "Independent: " + country.independent.toString()
        capital.text = country.capital.toString()


    }

}

但是在我的 Recycler 视图中,首都的结果显示为 [蒙得维的亚] 而不仅仅是蒙得维的亚。我如何从视觉结果中取出 []?

谢谢

在 fun bind(country: Country) 中更改此设置:

capital.text = country.capital.toString().drop(1).dropLast(1)

//or

capital.text = country.capital[0]

Capital 是一个列表,所以在列表上执行 toString() 会给你一个像这样的数组字符串:“[a,b,c,d,e]”。

如果你想打印第一项,你可以获取它并在其上使用 toString :country.capital?.get(0)?.toString()

如果你想在没有钩子的情况下打印整个列表,你可以使用这样的 joinToString 方法:

country.capital.joinToString(" ")

第一个参数是分隔符,这里我只是在每个项目之间使用了一个space,但是你可以用任何字符串来分隔它们。