BaseViewModel增加loadingLiveData

This commit is contained in:
huangjian
2022-07-28 18:47:34 +08:00
parent 48a635d588
commit 5aff1f9c61
3 changed files with 30 additions and 64 deletions

View File

@@ -1,5 +1,7 @@
package com.yizhuan.erban.base
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.yizhuan.xchat_android_core.utils.toast
@@ -8,18 +10,24 @@ import kotlinx.coroutines.launch
open class BaseViewModel : ViewModel() {
private val _loadingLiveData by lazy { MutableLiveData<Boolean>() }
val loadingLiveData: LiveData<Boolean> = _loadingLiveData
fun safeLaunch(
needLoading: Boolean = false,
onError: (e: Throwable) -> Unit = { it.message.toast() },
onComplete: (() -> Unit)? = null,
block: suspend CoroutineScope.() -> Unit
) {
viewModelScope.launch {
try {
if (needLoading) _loadingLiveData.value = true
block()
} catch (e: Throwable) {
e.printStackTrace()
onError(e)
} finally {
if (needLoading) _loadingLiveData.value = false
onComplete?.invoke()
}

View File

@@ -12,9 +12,6 @@ import org.greenrobot.eventbus.EventBus
class CpViewModel : BaseViewModel() {
private val _loadingLiveData = MutableLiveData<Boolean>()
val loadingLiveData: LiveData<Boolean> = _loadingLiveData
//发起邀请组队CP弹窗数据
private val _cpInvitePageData: MutableLiveData<CpInvitePageEntity> = MutableLiveData()
val cpInvitePageData: LiveData<CpInvitePageEntity> = _cpInvitePageData
@@ -41,69 +38,61 @@ class CpViewModel : BaseViewModel() {
//记录详情
private val _cpInviteDetailData: MutableLiveData<CpInviteDetailEntity> = MutableLiveData()
val cpInviteDetailData: LiveData<CpInviteDetailEntity> = _cpInviteDetailData
val cpInviteDetailData: LiveData<CpInviteDetailEntity> = _cpInviteDetailData
fun getCpInvitePageData(acceptUid: Long) {
_loadingLiveData.value = true
safeLaunch(
onError = dealCpDataError,
true,
block = {
CpModel.getCpInvitePageData(acceptUid)?.let {
_cpInvitePageData.value = it
}
_loadingLiveData.value = false
}
)
}
fun getCpMpApplyListData(pageNumber: Int, pageSize: Int) {
_loadingLiveData.value = true
safeLaunch(
onError = dealCpDataError,
true,
block = {
CpModel.cpMpApplyList(pageNumber, pageSize)?.let {
_cpMpApplyListData.value = it
}
_loadingLiveData.value = false
}
)
}
fun getUserCpLevelMpData() {
_loadingLiveData.value = true
safeLaunch(
onError = dealCpDataError,
true,
block = {
CpModel.userCpLevelMp()?.let {
_userCpLevelMpData.value = it
}
_loadingLiveData.value = false
}
)
}
fun getUserCpListData(type: Int) {
_loadingLiveData.value = true
safeLaunch(
onError = dealCpDataError,
true,
block = {
CpModel.userCpList(type)?.let {
_userCpListData.value = it
}
_loadingLiveData.value = false
}
)
}
fun getCpRelation(uid: Long) {
_loadingLiveData.value = true
safeLaunch(
onError = dealCpDataError,
true,
block = {
CpModel.userCpRelation(uid)?.let {
_cpRelation.value = it
}
_loadingLiveData.value = false
}
)
}
@@ -114,20 +103,19 @@ class CpViewModel : BaseViewModel() {
propsId: Int,
onBalanceNotEnough: (() -> Unit)? = null
) {
_loadingLiveData.value = true
safeLaunch(
true,
onError = {
if (it is ServerException && it.code == BalanceNotEnoughExeption.code) {
//余额不足
onBalanceNotEnough?.invoke()
_loadingLiveData.value = false
} else {
dealCpDataError.invoke(it)
it.message.toast()
}
},
block = {
CpModel.makeCpInvite(acceptUid, declaration, propsId)
_loadingLiveData.value = false
"邀请已发送".toast()
EventBus.getDefault().post(CpBindUnbindEvent())
}
@@ -136,65 +124,51 @@ class CpViewModel : BaseViewModel() {
fun revertUnbindCp() {
_loadingLiveData.value = true
safeLaunch(
onError = dealCpDataError,
true,
block = {
CpModel.revertUnboundCp()
_loadingLiveData.value = false
EventBus.getDefault().post(CpBindUnbindEvent())
}
)
}
fun replyInvite(id: Int, state: Int) {
_loadingLiveData.value = true
safeLaunch(
onError = dealCpDataError,
true,
block = {
CpModel.replyCpInvite(id, state)
_loadingLiveData.value = false
EventBus.getDefault().post(CpBindUnbindEvent())
}
)
}
fun unBindCp() {
_loadingLiveData.value = true
safeLaunch(
onError = dealCpDataError,
true,
block = {
CpModel.unboundCp()
_loadingLiveData.value = false
EventBus.getDefault().post(CpBindUnbindEvent())
}
)
}
fun cpTaskProcess(uid: Long) {
_loadingLiveData.value = true
safeLaunch(
onError = dealCpDataError,
true,
block = {
_cpTaskData.value = CpModel.cpTaskProcess(uid)
_loadingLiveData.value = false
}
)
}
fun getCpInviteDetail(cpId:Int){
_loadingLiveData.value = true
fun getCpInviteDetail(cpId: Int) {
safeLaunch(
onError = dealCpDataError,
true,
block = {
_cpInviteDetailData.value = CpModel.cpInviteDetail(cpId)
_loadingLiveData.value = false
}
)
}
private val dealCpDataError: (e: Throwable) -> Unit = {
_loadingLiveData.value = false
it.message.toast()
}
}

View File

@@ -30,9 +30,6 @@ class VipViewModel : BaseViewModel() {
private val _pageLiveData = MutableLiveData<Int>()
val pageLiveData: LiveData<Int> = _pageLiveData
private val _loadingLiveData = MutableLiveData<Boolean>()
val loadingLiveData: LiveData<Boolean> = _loadingLiveData
private val _saveOriginDisguiseResult = MutableLiveData<Boolean>()
val saveOriginDisguiseResult = _saveOriginDisguiseResult
@@ -46,15 +43,10 @@ class VipViewModel : BaseViewModel() {
val enterHideLiveData: LiveData<Boolean> = _enterHideLiveData
fun getVipPageInfo() {
_loadingLiveData.value = true
safeLaunch(
onError = {
it.message.toast()
_loadingLiveData.value = false
},
true,
block = {
val vipPageInfo = VipModel.getVipPageInfo()
_loadingLiveData.value = false
vipPageInfo?.let {
_authInfosLiveData.value = it.vipAuthInfos
_vipInfosLiveData.value = it.vipInfos
@@ -88,64 +80,56 @@ class VipViewModel : BaseViewModel() {
}
fun saveOriginDisguise() {
_loadingLiveData.value = true
safeLaunch(
true,
onError = {
it.message.toast()
_saveOriginDisguiseResult.value = false
_loadingLiveData.value = false
},
block = {
VipModel.saveOriginDisguise()
_saveOriginDisguiseResult.value = true
//换回装扮刷新缓存数据
UserModel.get().onlyUpdateLoginUserInfoCache()
_loadingLiveData.value = false
}
)
}
fun getVipBroadcastInfo() {
_loadingLiveData.value = true
safeLaunch(
true,
onError = {
_loadingLiveData.value = false
_vipBroadcastInfoLiveData.value = BeanResult.failed(it)
},
block = {
_loadingLiveData.value = false
_vipBroadcastInfoLiveData.value = BeanResult.success(VipModel.getVipBroadcastInfo())
}
)
}
fun sendVipBroadcast(content: String) {
_loadingLiveData.value = true
safeLaunch(
true,
onError = {
it.message.toast()
_loadingLiveData.value = false
_sendBroadcastLiveData.value = false
},
block = {
VipModel.sendVipBroadcast(content)
_loadingLiveData.value = false
_sendBroadcastLiveData.value = true
}
)
}
fun changeInvisibleInRoom(open: Boolean) {
_loadingLiveData.value = true
safeLaunch(
true,
onError = {
it.message.toast()
_loadingLiveData.value = false
_enterHideLiveData.value = !open
},
block = {
VipModel.changeInvisibleInRoom(open)
_loadingLiveData.value = false
_enterHideLiveData.value = open
UserModel.get().cacheLoginUserInfo?.userVipInfoVO?.enterHide = open
"设置成功".toast()