Как создать JSON CustomTypeAdapter в Apollo GraphQL для Android с помощью Kotlin - PullRequest
0 голосов
/ 28 августа 2018

Я изо всех сил пытаюсь понять, как добавить CustomTypeAdapter в мой ApolloClient.

В случае мутации наш сервер ожидает ввода json. Соответствующее приложение для iOS передается в виде строки json.

Когда я передаю строку, я получаю сообщение, спрашивающее, забыл ли я добавить нестандартный тип.

Вот моя попытка:

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 сгенерировал перечисление CustomType, реализующее ScalarType, но я не уверен, использовать его или нет.

@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, он не компилируется.

Будем благодарны за любые подсказки или указания. Спасибо.

1 Ответ

0 голосов
/ 29 августа 2018

Оказывается, Аполлон автоматически сгенерировал тип, и все, что мне нужно было сделать, это правильно объявить его в build.gradle. Мне не нужно было добавлять какой-либо адаптер нестандартного типа в ApolloClient.

ПРИМЕЧАНИЕ. Тип Json предоставлен нашим сервером.

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