如何解析Kotlin MVVM数据绑定中的Json

问题描述 投票:1回答:1

我正在尝试实现以下Json字符串:

{ 
   "msg":[ 
      "football",
      "cricket",
      "baseball",
      "rugby",
      "gulf"
],
   "status":"success"
}

我创建了如下数据类:

class Sports(

    val msg : List<String>,
    val status : String
)

class Msg (

    val football : List<String>,
    val cricket : List<String>,
    val baseball : List<String>,
    val rugby : List<String>,
    val gulf : List<String>
)

现在,我正在尝试获取对象,并按照教程在recyclerview列表中对其进行查看。

如何在下面更改它并在适配器中调用它?

interface PostApi {
    /**
     * Get the list of the pots from the API
     */
    @GET("/posts")
    fun getPosts(): Observable<List<Post>>
}

编辑:

MY适配器类如下:

    class PostListAdapter: RecyclerView.Adapter<PostListAdapter.ViewHolder>() {
        private lateinit var postList:Sports

        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PostListAdapter.ViewHolder {
            val binding: ItemPostBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.context), R.layout.item_post, parent, false)
            return ViewHolder(binding)
        }

        override fun onBindViewHolder(holder: PostListAdapter.ViewHolder, position: Int) {
            holder.bind(postList)
        }

        override fun getItemCount(): Int {
//Getting error in .isInitialied 'Unresolved reference'
            return if(::postList.isInitialized) postList.message.size else 0
        }

        fun updatePostList(postList: Sports){
            this.postList = postList
            notifyDataSetChanged()
        }

        class ViewHolder(private val binding: 
ItemPostBinding):RecyclerView.ViewHolder(binding.root){ //Getting error in root 'Unresolved reference'
            private val viewModel = PostViewModel()

            fun bind(post: Sports){
                viewModel.bind(post) //Getting error saying No value passed for parameter 'position'
                binding.viewModel = viewModel
            }
        }
    }
android kotlin data-binding retrofit2 rx-android
1个回答
1
投票

如果从服务器获取Json,则按如下方式调用它:

interface SportsApi {
    /**
     * Get the Sports from the API
     */
    @GET("/sports")
    fun getSports(): Observable<Sports>
}

或者,如果要在本地签入,则必须转换此Json

使用Gson

val sports = Gson().fromJson(json, Sports::java.class)

使用Moshi

val sports = Moshi.Builder().build().adapter(Sports::java.class).fromJson(json)
© www.soinside.com 2019 - 2024. All rights reserved.