Сгенерированный класс GraphQL, реализующий интерфейс запроса вместо интерфейса подписки

Я использую AWS AppSync для своего проекта. он отлично работает, когда данные передаются на сервер с использованием мутации. но у меня проблема с подпиской.

OnEventCreated onEventCreated = OnEventCreated.builder().build();
        subscriptionWatcher =  ClientFactory.getInstance(this).subscribe(onEventCreated); // giving error

Функция subscribe принимает входные данные, которые реализуют подписку. но когда я создаю свой проект, сгенерированный код реализует Query.

Сгенерированный класс

@Generated("Apollo GraphQL")
public final class OnEventCreated implements Query<OnEventCreated.Data, OnEventCreated.Data, Operation.Variables> {
  public static final String OPERATION_DEFINITION = "subscription OnEventCreated {\n"
      + "  onEventCreated {\n"
      + "    __typename\n"
      + "    id\n"
      + "    description\n"
      + "    name\n"
      + "    when\n"
      + "    where\n"
      + "  }\n"
      + "}";

  public static final String QUERY_DOCUMENT = OPERATION_DEFINITION;
}...

конкретный код для подписки в файле GraphQL: ..

subscription OnEventCreated {
    onEventCreated {
      id
      description
      name
      when
      where
    }
} ...

Файл Schema.json

type Subscription {
    subscribeToEventComments(eventId: String!): Comment
        @aws_subscribe(mutations: ["commentOnEvent"])
    onEventCreated: Event
        @aws_subscribe(mutations: ["createEvent"])
}...

Файлы сборки содержат...

compile 'com.amazonaws:aws-android-sdk-appsync:2.6.16'
    compile 'com.amazonaws:aws-android-sdk-appsync-compiler:2.6.16'
    compile 'com.amazonaws:aws-android-sdk-cognitoidentityprovider:2.6.16'
    compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0'
    compile 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'

что я могу сделать для этого. когда я создаю, сгенерированный класс OnEventCreated реализует интерфейс подписки вместо интерфейса запроса


person Adnan Ali    schedule 26.03.2018    source источник


Ответы (1)


Вы также установили директиву @aws_subscribe в своей схеме GraphQL, чтобы срабатывать мутация при подписке на onEventCreated? Например, это может выглядеть примерно так:

type Subscription {
    onEventCreated: Event
    @aws_subscribe(mutations: ["createEvent"])
}

Затем, когда мутация createEvent вызывается успешно, подписка отключается. Дополнительные данные можно найти здесь: https://docs.aws.amazon.com/appsync/latest/devguide/real-time-data.html

Отредактировано

Прочитав вашу информацию выше еще раз (некоторые из них были пропущены из-за переноса слов), я вижу, что ошибка, которую вы получаете, включена:

OnEventCreated onEventCreated = OnEventCreated.builder().build();
subscriptionWatcher = ClientFactory.getInstance(this).subscribe(onEventCreated);

Вам нужно передать onEventCreated в .createInstance() следующим образом:

subscriptionWatcher = ClientFactory.createInstance(this).subscribe(subscription);

В этот момент вы можете воздействовать на данные, когда получите такой ответ:

    subscriptionWatcher.execute(new AppSyncSubscriptionCall.Callback() {
        @Override
        public void onResponse(@Nonnull Response response) {
            Log.d("RESPONSE", response.data().toString());
        }

        @Override
        public void onFailure(@Nonnull ApolloException e) {
            Log.d("ERROR", e.toString());
        }

        @Override
        public void onCompleted() {
            Log.d("COMPLETE", "COMPLETED SUBSCRIPTION");
        }
    });
person Richard    schedule 26.03.2018
comment
Да. проверьте подписку этого типа {subscribeToEventComments(eventId: String!): Comment @aws_subscribe(mutations: [commentOnEvent]) onEventCreated: Event @aws_subscribe(mutations: [createEvent])} - person Adnan Ali; 27.03.2018