-
随着
Kotlin1.2.7
版本发布Androidstudio3.2
稳定版本发布,增加了更多的Kotlin
支持,是时候学习Kotlin -
学习看这个地址就行了,不懂的搜索下就差不多了,https://www.kotlincn.net/docs/reference/coroutines.html
-
我这篇不讲语法看文档就可以,我大概磨磨唧唧看了3天文档,没咋实地操作,只是看,所有才有这篇文章动手写个demo
-
功能很简单,动态网络获取数据加载然后列表显示,这就是我们正常开发APP一个流程,这个能走通了,剩下就是自己慢慢琢磨,就可以开发项目了
-
网络请求用的是
Retrofit
class DoubanRetrofit {
fun getData( ca:RetrofitCallBack<NowSHowMove>) {
val retrofit: Retrofit = Retrofit.Builder()
.baseUrl("http://api.douban.com/v2/movie/")
.addConverterFactory(GsonConverterFactory.create())
.build()
val ipService = retrofit.create(DouBanApi::class.java)
ipService.getNowSHowingMove().enqueue(object:Callback<NowSHowMove>{
override fun onResponse(call: Call<NowSHowMove>?, response: Response<NowSHowMove>?) {
if (response != null) {
ca?.succes(response)
};
}
override fun onFailure(call: Call<NowSHowMove>?, t: Throwable?) {
}
})
}
}
这里的需要注意的地方,因为kt
和java
是可以互向调用的所以,方便很多,网络库就可以继续使用okhttp,这里序号注意的是回调解析的对象response
不能直接获取属性值,需要response.body()
才能得到NowSHowMove
我们封装的列表数据
- view的绑定显示不在需要findview也不用bf,使用
View Binding
,当你新建工程的时候已经自动添加进来了
rv.adapter= NowShowMoveAdapter(response.body()!!);
这样就相当于setAdapter,这里需要注意我们的View Binding
同样可以用于adapter
class RecyclerHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun setData(entriesItem: EntriesItem) {
itemView.tv.text=entriesItem.title;
itemView.tv_show_time.text="上映时间: "+entriesItem.pubdate;
itemView.tv_rating.text="评分: "+entriesItem.rating;
Glide.with(itemView.context).load(entriesItem.images.large!!).into(itemView.iv);
}
}
- 显示数据
class NowShowMoveAdapter(private val mNowSHowMove: NowSHowMove) : RecyclerView.Adapter<NowShowMoveAdapter.RecyclerHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, postion: Int): RecyclerHolder {
val view = LayoutInflater.from(App.instance).inflate(R.layout.item_now_show_move, parent, false)
return RecyclerHolder(view);
}
override fun getItemCount(): Int {
return mNowSHowMove.entries!!.size;
}
override fun onBindViewHolder(vh: RecyclerHolder, postion: Int) {
vh.setData(mNowSHowMove.entries!![postion]);
}
class RecyclerHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun setData(entriesItem: EntriesItem) {
itemView.tv.text=entriesItem.title;
itemView.tv_show_time.text="上映时间: "+entriesItem.pubdate;
itemView.tv_rating.text="评分: "+entriesItem.rating;
Glide.with(itemView.context).load(entriesItem.images.large!!).into(itemView.iv);
}
}
}
- 这里需要注意构造函数传值,可以直接写在类名上,这样我们就不需要在定义成员变量了,到此整个数据就加载完毕,代码已经上传:https://github.com/l123456789jy/DouBan
网友评论