【发布时间】:2022-01-22 02:25:03
【问题描述】:
我有一个返回不同对象名称的调用,在这种情况下,每个名称都是你钱包地址的哈希值,但我想冷漠对待它们,因为重要的是它们内部的数据,使用标准像 Gson 这样的转换器我无法做到这一点,有什么办法可以手动做到吗?
{
"0x1234": {
"success": true,
"cache_last_updated": 1642815869695,
"total": 500
},
"0x1244445": {
"success": true,
"cache_last_updated": 1642815869695,
"total": 324
},
"0x47851":{
"success": true,
"cache_last_updated": 1642815869695,
"total": 324
}
}
我的仓库:
class WalletsResumeRepository(
private val service: apiService
) {
suspend fun getAddressData(listAddress: List<String>): Flow<Result<List<DetailModel>>> =
flow {
emit(Result.success(service.getWalletResume(listAddress))
}.catch { e ->
emit(Result.failure(RuntimeException("Something went wrong ${e.cause}")))
}
}
我的存储库总是陷入使用 NPE 的 catch 场景,记住响应可以有无数地址,因此无限的对象名称,我如何将它们视为泛型并仅将响应映射为列表?或类似的东西?
服务.kt
suspend fun getWalletResume(@Path("address") wallet: String): WalletDetailDTO
钱包DTO
data class WalletDetailDTO(
val success: Boolean,
@SerializedName("cache_last_updated")
val cacheLastUpdated: Long?,
val totalSlp: Int?
)
【问题讨论】:
-
服务调用
apiService.getWalletResume的签名是什么? -
你能影响 API 设计吗?使用值作为键会让你的生活变得悲惨。
标签: java android kotlin serialization retrofit2