Skip to content

Commit

Permalink
添加 CoroutineScope 扩展方法
Browse files Browse the repository at this point in the history
  • Loading branch information
ShenBen committed Oct 25, 2023
1 parent d525734 commit db128b2
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 16 deletions.
2 changes: 1 addition & 1 deletion lib/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ afterEvaluate {
// You can then customize attributes of the publication as shown below.
groupId = 'com.shencoder'
artifactId = 'mvvmkit'
version = '1.1.5'
version = '1.1.6'
}
}
}
Expand Down
18 changes: 3 additions & 15 deletions lib/src/main/java/com/shencoder/mvvmkit/ext/BaseViewModelExt.kt
Original file line number Diff line number Diff line change
Expand Up @@ -66,15 +66,15 @@ fun <T> BaseViewModel<*>.httpRequest(
onSuccess(ResultStatus.onSuccess(it.getResponseData()))
} else {
//处理公共的失败事件
BaseViewModelExt.defaultHttpRequestHandleFailure?.invoke(
DefaultHttpRequestHandle.defaultHttpRequestFailure?.invoke(
it.getResponseCode(),
it.getResponseMsg()
)
onFailure(ResultStatus.onFailure(it.getResponseCode(), it.getResponseMsg()))
}
}, {
//处理公共的异常事件
BaseViewModelExt.defaultHttpRequestHandleError?.invoke(it)
DefaultHttpRequestHandle.defaultHttpRequestError?.invoke(it)
onError(ResultStatus.onError(it))
})

Expand Down Expand Up @@ -139,16 +139,4 @@ fun BaseViewModel<*>.toastWarning(
fun BaseViewModel<*>.toastNormal(
text: String,
@ToastDuration duration: Int = Toast.LENGTH_SHORT
) = applicationContext.toastNormal(text, duration)

object BaseViewModelExt {
/**
* 默认处理公共的失败结果
*/
var defaultHttpRequestHandleFailure: ((code: Int, msg: String) -> Unit)? = null

/**
* 默认处理异常的失败结果
*/
var defaultHttpRequestHandleError: ((error: Throwable) -> Unit)? = null
}
) = applicationContext.toastNormal(text, duration)
64 changes: 64 additions & 0 deletions lib/src/main/java/com/shencoder/mvvmkit/ext/CoroutineScopeExt.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package com.shencoder.mvvmkit.ext

import com.shencoder.mvvmkit.http.ResultStatus
import com.shencoder.mvvmkit.http.bean.BaseResponse
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

/**
*
* @author ShenBen
* @date 2023/10/25 21:40
* @email 714081644@qq.com
*/

fun <T> CoroutineScope.httpRequest(
block: suspend CoroutineScope.() -> BaseResponse<T>,
onSuccess: (ResultStatus.Success<T?>) -> Unit = {},
onFailure: (ResultStatus.Failure) -> Unit = {},
onError: (ResultStatus.Error) -> Unit = {},
onComplete: () -> Unit = {}
) = launch(Dispatchers.Main) {
val result = runCatching {
withContext(Dispatchers.IO, block)
}

result.fold({
if (it.isSuccess()) {
onSuccess(ResultStatus.onSuccess(it.getResponseData()))
} else {
//处理公共的失败事件
DefaultHttpRequestHandle.defaultHttpRequestFailure?.invoke(
it.getResponseCode(),
it.getResponseMsg()
)
onFailure(ResultStatus.onFailure(it.getResponseCode(), it.getResponseMsg()))
}
}, {
//处理公共的异常事件
DefaultHttpRequestHandle.defaultHttpRequestError?.invoke(it)
onError(ResultStatus.onError(it))
})

onComplete()
}

fun <T> CoroutineScope.request(
block: suspend CoroutineScope.() -> T,
onSuccess: (ResultStatus.Success<T?>) -> Unit = {},
onError: (ResultStatus.Error) -> Unit = {},
onComplete: () -> Unit = {}
) = launch(Dispatchers.Main) {
val result = runCatching {
withContext(Dispatchers.IO, block)
}
result.fold({
onSuccess(ResultStatus.onSuccess(it))
}, {
onError(ResultStatus.onError(it))
})

onComplete()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.shencoder.mvvmkit.ext

/**
*
* @author ShenBen
* @date 2023/10/25 21:41
* @email 714081644@qq.com
*/
object DefaultHttpRequestHandle {

/**
* 默认处理公共的失败结果
*/
var defaultHttpRequestFailure: ((code: Int, msg: String) -> Unit)? = null

/**
* 默认处理异常的失败结果
*/
var defaultHttpRequestError: ((error: Throwable) -> Unit)? = null
}

0 comments on commit db128b2

Please sign in to comment.