增加加载异常处理
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user