基于AAC架构玩安卓客户端
预览图如下:
首页、公众号、知识体系、项目
网络请求
还是常用大名鼎鼎的Retrofit2,然后结合了coroutines,使用起来更加方便了
举个栗子:
接口只需要使用suspend即可
@FormUrlEncoded
@POST("user/login")
suspend fun login(@Field("username") username:String,@Field("password") password:String) : Response>
处理请求的逻辑封装了另一个类CallResult,只显示关键部分
fun hold(result: suspend () -> Response>): CallResult {
var response: Response>?
var netJob: Job? = null
owner?.apply {
netJob = lifecycleScope.launchWhenStarted {
__________ 处理loading状态 ————————————————
response = withContext(Dispatchers.IO) {
withTimeoutOrNull(10000){//超时处理
result.invoke() //网络请求
}
}
if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
withContext(Dispatchers.Main) {
__________ 处理超时和返回结果的逻辑————————————————
}
} else {
netJob?.cancel()
}
}
}
return this
}
使用方式如下:
fun login(username:String,password:String,call:MutableLiveData>){
CallResult(owner)
.loading {
__________ 处理读取————————————————
}.success { result, message ->
__________ 处理成功————————————————
call.value = result
}.error { result, code, message ->
__________ 处理错误————————————————
call.value = result
}.outTime {
__________ 处理超时————————————————
call.value = it
}.hold {
api.login(username, password)//登录
}
}
该项目使用: LiveData、ViewModel、Room 、Databinding 、WorkManager 、Lifecycles
图片加载采用: Glide
消息总线采用了:live-event-bus github:https://github.com/JeremyLiao/LiveEventBus
使用到了SlideBack的返回动画,fork后我进行进修改,原项目github:https://github.com/ParfoisMeng/SlideBack
其中照片墙部分不属于玩安卓的内容,是我本人自行加上,属于本地内容,利用Room数据库完成基本的数据获取。