如何在 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

Apollo 客户端不显示错误消息

在 GraphQL 对象查询中使用变量

AWS AppSync 初始批量放置不更新缓存

一起Talk Android吧(第四百九十五回:如何使用Java版MQTT客户端)

如何在 Next.js 代码优先方法中使用 graphql-type-json 标量