基于MVVM架构思想和Kotlin,使用Android JetPack开发一款App

电影资讯
  1. 电影资讯App是一个纯练手项目,使用了系统API28,全部是基于Androidx包下的。
  2. 使用Kotlin语言开发,MVVM架构思想,使用了Android JetPack中的LiveData、ViewModel、Room等架构组件。
  3. Api来自豆瓣电影,豆瓣电影Api目前是不公开的,小编是在简书上看到有人公开了访问豆瓣电影的Api的API_KEY,如果有侵犯,请联系删除!
项目截图
截图1截图2截图 3截图 4截图5
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

app主要设计到知识点:

- Material Design UI设计风格; 
- 使用Kotlin语言开发,MVVM软件架构设计,使用了Android JetPack中的LiveData、ViewModel、Room等AAC架构组件。
- 协程+okhttp+Retrofit封装网络请求;
- 自定义RecyclerView支持上拉刷新和下拉加载,并且使用装饰者设计模式添加不同类型头部和底部的View以及动画;

封装BaseViewModel,利用协程处理网络请求,处理异步任务。

open class BaseViewModel : ViewModel() {
     val loadingLiveData = SingleLiveData<Boolean>()

     val errorLiveData = SingleLiveData<Throwable>()

     /**
      * 利用协程处理网络请求,处理异步任务。
      * block() 处理网络请求(Retrofit中对应的api接口方法)
      * error() 处理网络请求发生错误
      * complete() 网络请求完成之后调用
      */
     fun launch(
          block: suspend () -> Unit,
          error: suspend (Throwable) -> Unit,
          complete: suspend () -> Unit
     ) {
          loadingLiveData.postValue(true)
          viewModelScope.launch(Dispatchers.IO) {
               try {
                    block()
               } catch (e: Exception) {
                    error(e)
               } finally {
                    complete()
               }
          }
     }
}

电影模块ViewModel中的一个方法,请求电影详情,请求到数据封装到具体的LiveData中,View层去订阅数据。

/**
 * 电影详情
 * @param  movieId 影片id
 */
fun getMovieInfo(movieId: String) {
    launch({
        val movieInfo = movieRepository.getMovieInfo(movieId, API_KEY)
        movieInfoLiveData.postValue(movieInfo)
    }, {
        errorLiveData.postValue(it)
    }, {
        loadingLiveData.postValue(false)
    })
}

项目地址github传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值