增加加载异常处理

This commit is contained in:
2025-09-05 16:42:34 +08:00
parent 18a0bb8494
commit b4ed311978

View File

@@ -12,7 +12,10 @@ abstract class DataLoader<T,ET> {
var total by mutableStateOf(0) var total by mutableStateOf(0)
var pageSize by mutableStateOf(10) var pageSize by mutableStateOf(10)
var hasNext by mutableStateOf(true) var hasNext by mutableStateOf(true)
var isLoading by mutableStateOf(false)
var error by mutableStateOf<String?>(null)
var onListChanged: ((List<T>) -> Unit)? = null var onListChanged: ((List<T>) -> Unit)? = null
var onError: ((String) -> Unit)? = null
private var firstLoad = true private var firstLoad = true
@@ -28,7 +31,17 @@ abstract class DataLoader<T,ET> {
Log.d("DataLoader", "loadData跳过 - 非首次加载") Log.d("DataLoader", "loadData跳过 - 非首次加载")
return return
} }
if (isLoading) {
Log.d("DataLoader", "loadData跳过 - 正在加载中")
return
}
firstLoad = false firstLoad = false
isLoading = true
error = null
try {
Log.d("DataLoader", "调用fetchData - page: $page, pageSize: $pageSize") Log.d("DataLoader", "调用fetchData - page: $page, pageSize: $pageSize")
val result = fetchData(page, pageSize, extra) val result = fetchData(page, pageSize, extra)
list = result.list.toMutableList() list = result.list.toMutableList()
@@ -38,6 +51,14 @@ abstract class DataLoader<T,ET> {
this.hasNext = result.list.size == pageSize this.hasNext = result.list.size == pageSize
Log.d("DataLoader", "loadData完成 - 数据量: ${list.size}, total: $total, hasNext: $hasNext") Log.d("DataLoader", "loadData完成 - 数据量: ${list.size}, total: $total, hasNext: $hasNext")
onListChanged?.invoke(list) onListChanged?.invoke(list)
} catch (e: Exception) {
Log.e("DataLoader", "loadData失败", e)
error = e.message ?: "加载数据时发生未知错误"
firstLoad = true // 重置firstLoad状态允许重试
onError?.invoke(error!!)
} finally {
isLoading = false
}
} }
suspend fun loadMore(extra: ET) { suspend fun loadMore(extra: ET) {
@@ -49,6 +70,16 @@ abstract class DataLoader<T,ET> {
Log.d("DataLoader", "loadMore跳过 - hasNext为false") Log.d("DataLoader", "loadMore跳过 - hasNext为false")
return return
} }
if (isLoading) {
Log.d("DataLoader", "loadMore跳过 - 正在加载中")
return
}
isLoading = true
error = null
try {
Log.d("DataLoader", "开始loadMore - 当前页: $page, 当前数据量: ${list.size}") Log.d("DataLoader", "开始loadMore - 当前页: $page, 当前数据量: ${list.size}")
val result = fetchData(page + 1, pageSize, extra) val result = fetchData(page + 1, pageSize, extra)
list.addAll(result.list) list.addAll(result.list)
@@ -56,6 +87,13 @@ abstract class DataLoader<T,ET> {
hasNext = result.list.size == pageSize hasNext = result.list.size == pageSize
Log.d("DataLoader", "loadMore完成 - 新页: $page, 新数据量: ${list.size}, 本次获取: ${result.list.size}, hasNext: $hasNext") Log.d("DataLoader", "loadMore完成 - 新页: $page, 新数据量: ${list.size}, 本次获取: ${result.list.size}, hasNext: $hasNext")
onListChanged?.invoke(list) onListChanged?.invoke(list)
} catch (e: Exception) {
Log.e("DataLoader", "loadMore失败", e)
error = e.message ?: "加载更多数据时发生未知错误"
onError?.invoke(error!!)
} finally {
isLoading = false
}
} }
fun clear() { fun clear() {
@@ -65,5 +103,7 @@ abstract class DataLoader<T,ET> {
pageSize = 10 pageSize = 10
hasNext = true hasNext = true
firstLoad = true firstLoad = true
isLoading = false
error = null
} }
} }