小编Naz*_*Naz的帖子

Android:Realm + Retrofit - 序列化apiresponse

前言:我正在使用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响应(处理数组和单个对象的情况)序列化以将它们放入我的领域?

android realm gson retrofit

4
推荐指数
1
解决办法
5900
查看次数

Kotlin Coroutine Retrofit - 链式网络调用

我正在尝试使用 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)

android kotlin kotlin-coroutines

2
推荐指数
1
解决办法
2180
查看次数

标签 统计

android ×2

gson ×1

kotlin ×1

kotlin-coroutines ×1

realm ×1

retrofit ×1