電影資訊
- 電影資訊App是一個純練手項目,使用了系統(tǒng)API28敷待,全部是基于Androidx包下的。
- 使用Kotlin語言開發(fā)色迂,MVVM架構(gòu)思想霞捡,使用了Android JetPack中的LiveData、ViewModel愉昆、Room等架構(gòu)組件职员。
- Api來自豆瓣電影,豆瓣電影Api目前是不公開的跛溉,小編是在簡書上看到有人公開了訪問豆瓣電影的Api的API_KEY焊切,如果有侵犯,請聯(lián)系刪除芳室!
項目截圖
截圖1 | 截圖2 | 截圖 3 | 截圖 4 | 截圖5 |
---|---|---|---|---|
app主要設(shè)計到知識點:
- Material Design UI設(shè)計風(fēng)格专肪;
- 使用Kotlin語言開發(fā),MVVM軟件架構(gòu)設(shè)計堪侯,使用了Android JetPack中的LiveData嚎尤、ViewModel、Room等AAC架構(gòu)組件伍宦。
- 協(xié)程+okhttp+Retrofit封裝網(wǎng)絡(luò)請求芽死;
- 自定義RecyclerView支持上拉刷新和下拉加載,并且使用裝飾者設(shè)計模式添加不同類型頭部和底部的View以及動畫次洼;
封裝BaseViewModel关贵,利用協(xié)程處理網(wǎng)絡(luò)請求,處理異步任務(wù)滓玖。
open class BaseViewModel : ViewModel() {
val loadingLiveData = SingleLiveData<Boolean>()
val errorLiveData = SingleLiveData<Throwable>()
/**
* 利用協(xié)程處理網(wǎng)絡(luò)請求坪哄,處理異步任務(wù)。
* block() 處理網(wǎng)絡(luò)請求(Retrofit中對應(yīng)的api接口方法)
* error() 處理網(wǎng)絡(luò)請求發(fā)生錯誤
* complete() 網(wǎng)絡(luò)請求完成之后調(diào)用
*/
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中的一個方法势篡,請求電影詳情翩肌,請求到數(shù)據(jù)封裝到具體的LiveData中,View層去訂閱數(shù)據(jù)禁悠。
/**
* 電影詳情
* @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傳送門