增加加载异常处理

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,16 +31,34 @@ 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
Log.d("DataLoader", "调用fetchData - page: $page, pageSize: $pageSize") isLoading = true
val result = fetchData(page, pageSize, extra) error = null
list = result.list.toMutableList()
this.page = page try {
this.total = result.total Log.d("DataLoader", "调用fetchData - page: $page, pageSize: $pageSize")
this.pageSize = pageSize val result = fetchData(page, pageSize, extra)
this.hasNext = result.list.size == pageSize list = result.list.toMutableList()
Log.d("DataLoader", "loadData完成 - 数据量: ${list.size}, total: $total, hasNext: $hasNext") this.page = page
onListChanged?.invoke(list) this.total = result.total
this.pageSize = pageSize
this.hasNext = result.list.size == pageSize
Log.d("DataLoader", "loadData完成 - 数据量: ${list.size}, total: $total, hasNext: $hasNext")
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,13 +70,30 @@ abstract class DataLoader<T,ET> {
Log.d("DataLoader", "loadMore跳过 - hasNext为false") Log.d("DataLoader", "loadMore跳过 - hasNext为false")
return return
} }
Log.d("DataLoader", "开始loadMore - 当前页: $page, 当前数据量: ${list.size}")
val result = fetchData(page + 1, pageSize, extra) if (isLoading) {
list.addAll(result.list) Log.d("DataLoader", "loadMore跳过 - 正在加载中")
page += 1 return
hasNext = result.list.size == pageSize }
Log.d("DataLoader", "loadMore完成 - 新页: $page, 新数据量: ${list.size}, 本次获取: ${result.list.size}, hasNext: $hasNext")
onListChanged?.invoke(list) isLoading = true
error = null
try {
Log.d("DataLoader", "开始loadMore - 当前页: $page, 当前数据量: ${list.size}")
val result = fetchData(page + 1, pageSize, extra)
list.addAll(result.list)
page += 1
hasNext = result.list.size == pageSize
Log.d("DataLoader", "loadMore完成 - 新页: $page, 新数据量: ${list.size}, 本次获取: ${result.list.size}, hasNext: $hasNext")
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
} }
} }