【问题标题】:Android kotlin parser Gson VolleyAndroid kotlin 解析器 Gson Volley
【发布时间】:2018-08-12 06:22:26
【问题描述】:

如何使用 Gson-Volley 访问 idClubLocal?我得到了 codCompeticion 和 nomCompeticion 但没有办法做到这一点 idClubLocal

[{"codeCompeticion": "26", "nomCompeticion": "Equipo", "jornadas": [ {"idClubLocal": "xxxxx"....

FragJor 实际

class FragJorActual : Fragment() {

    private val TAG = "MainActivity"   

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        retainInstance = true

        requestJsonObject()
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
        val view = inflater.inflate(R.layout.activity_recycler, container, false)

        val miTexto: TextView = view.findViewById(R.id.tv_Grupo)
        miTexto.setText(R.string.list_juveniles)

        return view
    }

    private fun requestJsonObject() {    

        val queue = Volley.newRequestQueue(activity)
        val url = "mi_url"

        val stringRequest = StringRequest(Request.Method.GET, url, Response.Listener { response ->

            val builder = GsonBuilder()
            val mGson = builder.create()

            var items: List<ModelArray> = ArrayList()
            items = Arrays.asList(*mGson.fromJson(response, Array<ModelArray>::class.java))


            recyclerView !!.layoutManager = GridLayoutManager(activity!!, 1)

            val adapter = CalendarioAdapterArray(activity !!, items )
            recyclerView !!.adapter = adapter

        }, Response.ErrorListener { error -> Log.d(TAG, "Error " + error.message) })
        queue.add(stringRequest)
    }
}

日历适配器数组

class CalendarioAdapterArray(internal var context: Context, internal var jornadasList: List<ModelArray>) : RecyclerView.Adapter<CalendarioAdapterArray.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val itemView = LayoutInflater.from(parent.context).inflate(R.layout.calendario_row, parent, false)
        return ViewHolder(itemView)
    }

    @RequiresApi(Build.VERSION_CODES.O)
    @SuppressLint("SetTextI18n")
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val jornada = jornadasList[position]

        holder.textEquipoLocal.text = jornada.jornad.idClubLocal
        holder.textEquipoVisi.text = jornada.nomVisi
    }

    override fun getItemCount(): Int = jornadasList.size

    class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {

        var textEquipoLocal: TextView = itemView!!.findViewById<TextView>(R.id.tv_Equipo_Local) as TextView
        var textEquipoVisi: TextView = itemView!!.findViewById<TextView>(R.id.tv_Equipo_Visitante) as TextView
    }
}

模型数组

class ModelArray {

    @SerializedName("codCompeticion")
    @Expose
    var Local: String? = null

    @SerializedName("nomCompeticion")
    @Expose
    var nomVisi: String? = null

    @SerializedName("jornadas")
    @Expose
    var jornad: List<ModelList>? = null
}

模型列表

类模型列表 {

@SerializedName("idClubLocal")
@Expose
var idClubLocal: String? = null

init {

    this.idClubLocal = idClubLocal
}

}

【问题讨论】:

  • jornadListjornada.jornad.get(0).idClubLocal 应该可以工作

标签: android kotlin gson android-volley


【解决方案1】:

您尝试访问列表既不是指定索引也不是迭代它们。

以任何方式迭代,由你决定:

jornada.jornad?.map { it.idClubLocal }

访问第一个索引,例如:

jornada.jornad?.first()?.idClubLocal

【讨论】:

  • jornada.jornad?.first()?.idClubLocal 只有 1 个注册
  • 但是什么时候所有的项目?
  • 如上回答:jornada.jornad?.map { it.idClubLocal } 迭代由您决定如何处理:连接、初始化新对象等。您可以访问列表中的所有项目。
  • 不知道怎么弄
  • e.g.: concat with comma: jornada.jornad?.joinToString(", ") { it.idClubLocal } 如前所述,如何处理列表项由您决定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 2016-07-25
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多