Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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
Android 如何在Kotlin MVVM数据绑定中解析Json_Android_Kotlin_Data Binding_Retrofit2_Rx Android - Fatal编程技术网

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

Android 如何在Kotlin MVVM数据绑定中解析Json,android,kotlin,data-binding,retrofit2,rx-android,Android,Kotlin,Data Binding,Retrofit2,Rx Android,我正在尝试实现以下Json字符串: { "msg":[ "football", "cricket", "baseball", "rugby", "gulf" ], "status":"success" } 我创建了如下数据类: class Sports( val msg : List<String>, val status : String ) class PostListAda

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

{ 
   "msg":[ 
      "football",
      "cricket",
      "baseball",
      "rugby",
      "gulf"
],
   "status":"success"
}
我创建了如下数据类:

class Sports(

    val msg : List<String>,
    val status : String
)
    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
            }
        }
    }
班级体育(
val msg:List,
val状态:字符串
)

class Msg(
瓦尔足球队:名单,
瓦尔·克里克:名单,
瓦尔:名单,
瓦尔·拉格比:名单,
瓦尔湾:名单
)
现在,我正在尝试获取对象,并按照教程在recyclerview列表中查看它

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

interface PostApi {
    /**
     * Get the list of the pots from the API
     */
    @GET("/posts")
    fun getPosts(): Observable<List<Post>>
}
接口{
/**
*从API获取POT列表
*/
@获取(“/posts”)
fun getPosts():可观察
}
编辑:

我的适配器类如下所示:

class Sports(

    val msg : List<String>,
    val status : String
)
    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
            }
        }
    }
class PostListAdapter:RecyclerView.Adapter(){
私有lateinit var postList:运动
重写CreateViewHolder(父级:ViewGroup,viewType:Int):PostListAdapter.ViewHolder{
val binding:ItemPostBinding=DataBindingUtil.inflate(LayoutFlater.from(parent.context),R.layout.item_post,parent,false)
返回视图保持器(绑定)
}
覆盖onBindViewHolder(holder:PostListAdapter.ViewHolder,位置:Int){
持有者绑定(postList)
}
重写getItemCount():Int{
//获取.isInitialied“未解析引用”中的错误
如果(::postList.isInitialized)postList.message.size else为0,则返回
}
乐趣更新列表(postList:Sports){
this.postList=postList
notifyDataSetChanged()
}
类ViewHolder(专用val绑定:
ItemPostBinding):RecyclerView.ViewHolder(binding.root){//在根“未解析引用”中获取错误
private val viewModel=PostViewModel()
趣味绑定(帖子:体育){
viewModel.bind(post)//获取错误,表示没有为参数“position”传递值
binding.viewModel=viewModel
}
}
}

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

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

val sports = Moshi.Builder().build().adapter(Sports::java.class).fromJson(json)

你的消息模型是无用的。不需要使用Gson创建它,您必须执行以下操作:val sports=Gson().fromJson(json,sports::java.class);我已经按照您的建议进行了修改,并且也修改了适配器,但是我得到的错误很少。你能帮我解决这些问题吗?我在我的问题hi@Md.Asaduzzaman的编辑部分附上了适配器,我已经解决了错误,但没有输出任何结果。你能告诉我哪里出了问题吗?作为单独问题提出: