前言:我正在使用Retrofit处理我的API调用和Realm(realm.io)来存储数据.
API im处理使用以下结构:
阵列响应
{
"response":
[
{
"objectField1":"abc"
"objectField2":"abc"
"objectField3":"abc"
"objectField4":"abc"
},
{
"objectField1":"abc"
"objectField2":"abc"
"objectField3":"abc"
"objectField4":"abc"
}
]
}
Run Code Online (Sandbox Code Playgroud)
单个对象响应
{
"response":
{
"objectField1":"abc"
"objectField2":"abc"
"objectField3":"abc"
"objectField4":"abc"
}
}
Run Code Online (Sandbox Code Playgroud)
所有api响应都包含在数组(如果结果大小> 1)或对象(如果结果大小== 1)的响应对象中.
我目前的API调用如下:
@GET("/api/myEndpoint")
void getAllExampleObjects(Callback<MyRealmClass> callback);
Run Code Online (Sandbox Code Playgroud)
如何将API响应(处理数组和单个对象的情况)序列化以将它们放入我的领域?
我正在尝试使用 Kotlin Coroutines + Retrofit 进行网络调用,但我当前的实现有两个问题。
A)它只在我的循环完成后返回。
B) 在进行下一个调用之前,它似乎要等待循环中的每个调用完成。
我正在与之交互的 API 要求我进行初始提取,返回一个 itemId 的数组
[ 1234, 3456, 3456 ... ]
Run Code Online (Sandbox Code Playgroud)
对于上述响应中的每个项目,使用 id 获取该项目
{ id: 1234, "name": "banana" ... }
Run Code Online (Sandbox Code Playgroud)
我目前的实现如下,我做错了什么?
suspend operator fun invoke(feedType: String): NetworkResult<List<MyItem>> = withContext(Dispatchers.IO) {
val itemList: MutableList< MyItem > = mutableListOf()
val result = repository.fetchItems()
when (result) {
is NetworkResult.Success -> {
itemList.addAll(result.data)
for (i in itemList) {
val emptyItem = result.data[i]
val response = repository.fetchItem(emptyItem.id)
when (response) {
is NetworkResult.Success -> {
val …Run Code Online (Sandbox Code Playgroud)