3

我正在努力弄清楚如何将 CustomTypeAdapter 添加到我的 ApolloClient 中。

对于突变,我们的服务器期待 json 输入。相应的 iOS 应用正在传入一个 json 字符串。

当我传入一个字符串时,我会收到一条消息,询问我是否忘记添加自定义类型。

这是我的尝试:

构建.gradle

apollo {
        useSemanticNaming = true
        customTypeMapping['ISOTime'] = "java.util.Date"
        customTypeMapping['JSON'] = "java.lang.JSONObject"
    }

这是它被实例化的地方。

val jsonCustomTypeAdapter = object : CustomTypeAdapter<JSONObject> {
                override fun decode(value: CustomTypeValue<*>): JSONObject {
                    return JSONObject()
                }

                override fun encode(value: JSONObject): CustomTypeValue<*> {
                    return CustomTypeValue.GraphQLJsonString(value.toString())
                }
            }

 mApolloClient = ApolloClient
                .builder()
                .serverUrl(baseUrl)
                .addCustomTypeAdapter(jsonCustomTypeAdapter)
                .normalizedCache(cacheFactory, CacheKeyResolver.DEFAULT)
                .httpCache(ApolloHttpCache(cacheStore, null))
                .okHttpClient(mHttpClient)
                .build()

似乎 Apollo 已经生成了一个实现 ScalarType 的 CustomType 枚举,但我不确定是否或如何使用它。

@Generated("Apollo GraphQL")
public enum CustomType implements ScalarType {
  JSON {
    @Override
    public String typeName() {
      return "Json";
    }

    @Override
    public Class javaType() {
      return Object.class;
    }
  },

  ID {
    @Override
    public String typeName() {
      return "ID";
    }

    @Override
    public Class javaType() {
      return String.class;
    }
  }
}

我已经尝试了apolloandroid github上给出的示例, 但它对我不起作用,它是在 Java 中,在我将它转换为 Kotlin 后,它无法编译。

任何提示或指导方向将不胜感激。谢谢。

4

1 回答 1

4

事实证明,Apollo 已经自动生成了该类型,而我所要做的就是在 build.gradle 中正确声明它。我不需要向 ApolloClient 添加任何自定义类型适配器。

注意: Json 类型由我们的服务器提供。

apollo {
        useSemanticNaming = true
        customTypeMapping['ISOTime'] = "java.util.Date"
        customTypeMapping['Json'] = "java.lang.String"
    }
于 2018-08-29T00:37:13.390 回答