100行Kotlin实现数据加载,解析,列表显示

来源:互联网 发布:淘宝备份的装修在哪里 编辑:程序博客网 时间:2024/06/05 15:27
程序员就是折腾自己的群体。不断涌出新框架,新语言。逆水行舟,不进则退。

趁着热度,也亲手撸一把kotlin。不是简单的打印hello kotlin的demo。而是app中最常用的请求数据,解析,列表显示
使用的是豆瓣电影Top250的api。

第一次用Kotlin,还是带着java的思想, 总会磕磕绊绊, 不过熟悉之后, 速度就是飞快,代码量骤减啊, 不到一百行。

使用心得:

  1. 使用data class 创建Bean。不需要再写一堆setter()/getter()函数
  2. 没有关键字new了,这要习惯
  3. 不用AsyncTask, 而是用一个库 AsyncAwait, 非常非常简洁
  4. JSON解析:目前没有发现较好的kotlin native库。所以用Gson。反正是100%兼容java。

Talk is cheap, show me the code GitHub

喜欢给个star吧。

MainActivity.kt

    data class ImageBean(var small: String, var large: String, var medium: String)    data class MovieBean(var id: String, var title: String, var year: String, var images: ImageBean)    data class ResultBean(var count: Int,var start: Int,var subjects: ArrayList<MovieBean>,var title: String)    class MainActivity : AppCompatActivity() {        lateinit var mRecyclerView : RecyclerView        lateinit var adapter: MyAdapter        lateinit var linearManager: LinearLayoutManager        var movieArray: ArrayList<MovieBean> = ArrayList()        override fun onCreate(savedInstanceState: Bundle?) {            super.onCreate(savedInstanceState)            setContentView(R.layout.activity_main)            mRecyclerView = findViewById(R.id.recycler_view) as RecyclerView            adapter = MyAdapter(this)            linearManager = LinearLayoutManager(this)            mRecyclerView.adapter = adapter            mRecyclerView.layoutManager = linearManager            async() {                val jsonStr = await {                    URL("https://api.douban.com/v2/movie/top250").readText()                }                movieArray = Gson().fromJson(jsonStr, ResultBean::class.java).subjects                adapter.setData(movieArray)            }        }    }

MyAdapter.kt实现

package com.tanjinc.hotmovieimport android.content.Contextimport android.support.v7.widget.RecyclerViewimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport android.widget.ImageViewimport android.widget.TextViewimport com.bumptech.glide.Glideimport java.util.*/** * Created by tanjinc on 17/5/19. */class MyAdapter (context: Context) : RecyclerView.Adapter<MyAdapter.ViewHolder>()  {    var mContext : Context    var mData: ArrayList<MovieBean> = ArrayList()    init {        mContext = context    }    fun setData(data : ArrayList<MovieBean>) {        mData = data        notifyDataSetChanged()    }    override fun getItemCount(): Int = mData.size    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {        val view = LayoutInflater.from(mContext).inflate(R.layout.movie_item_layout, null)        return ViewHolder(view)    }    override fun onBindViewHolder(holder: ViewHolder?, position: Int) {        holder!!.titleTv.setText(mData.get(position).title)        Glide.with(mContext).load(mData.get(position).images.large).into(holder!!.thumbImg)    }    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {        var thumbImg: ImageView        var titleTv : TextView        init {            titleTv = itemView.findViewById(R.id.title_tv) as TextView            thumbImg = itemView.findViewById(R.id.thumb_img) as ImageView        }    }}