如何在 android 客户端中使用 graphql 订阅
Posted
技术标签:
【中文标题】如何在 android 客户端中使用 graphql 订阅【英文标题】:How to use graphql subscriptions in android client 【发布时间】:2019-05-18 06:50:13 【问题描述】:如何在 Apollo android 客户端中使用 graphq 订阅。 现在我的服务器上有代码:
type Subscription
targetLocationUpdated(id: String!): Target
我的解析器代码:
Subscription:
locationAdded:
subscribe: () => pubsub.asyncIterator(LOCATION_ADDED),
,
targetLocationUpdated:
subscribe: withFilter(
() => pubsub.asyncIterator('TARGET_UPDATED'),
(payload, variables) =>
console.log(payload.targetLocationUpdated.id === variables.id);
return payload.targetLocationUpdated.id === variables.id;
)
我的 Android 客户端具有向我的 graphql 服务器端点发送休息请求的方法:
public static ApolloClient getMyApolloClient()
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(loggingInterceptor)
.build();
myApolloClient = ApolloClient.builder()
.serverUrl(BASE_URL)
.okHttpClient(okHttpClient)
.build();
return myApolloClient;
但我不知道如何在 android 客户端上使用订阅。 在官方 appolo 文档中,我没有找到在 android 客户端中使用订阅的示例。 请帮我解决这个问题。
【问题讨论】:
你能解决这个问题吗? 【参考方案1】:我参考了这个链接,它可能对你或其他人有所帮助。
GitHuntEntryDetailActivity.java
ApolloSubscriptionCall<RepoCommentAddedSubscription.Data> subscriptionCall = application.apolloClient()
.subscribe(new RepoCommentAddedSubscription(repoFullName));
disposables.add(Rx2Apollo.from(subscriptionCall)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(
new DisposableSubscriber<Response<RepoCommentAddedSubscription.Data>>()
@Override public void onNext(Response<RepoCommentAddedSubscription.Data> response)
commentsListViewAdapter.addItem(response.data().commentAdded().content());
Toast.makeText(GitHuntEntryDetailActivity.this, "Subscription response received", Toast.LENGTH_SHORT)
.show();
@Override public void onError(Throwable e)
Log.e(TAG, e.getMessage(), e);
Toast.makeText(GitHuntEntryDetailActivity.this, "Subscription failure", Toast.LENGTH_SHORT).show();
@Override public void onComplete()
Log.d(TAG, "Subscription exhausted");
Toast.makeText(GitHuntEntryDetailActivity.this, "Subscription complete", Toast.LENGTH_SHORT).show();
)
);
【讨论】:
谢谢,我试试看。以上是关于如何在 android 客户端中使用 graphql 订阅的主要内容,如果未能解决你的问题,请参考以下文章
我们如何从 GraphQL 的 RequestContextHolder 获取 GraphQL 的 HttpServletRequest(DefaultGlobalContext)(使用 graphq