3

CustomTypeAdapter を ApolloClient に追加する方法を理解するのに苦労しています。

ミューテーションの場合、サーバーは json 入力を想定しています。対応する iOS アプリは json 文字列を渡しています。

文字列を渡すと、customtype を追加するのを忘れていないかどうかを尋ねるメッセージが表示されます。

これが私の試みです:

build.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