android graphQL 阿波罗
Posted
技术标签:
【中文标题】android graphQL 阿波罗【英文标题】:android graphQL apollo 【发布时间】:2017-10-15 08:38:12 【问题描述】:我正在使用 apollo-GraphQL 进行 API 响应。我在拦截器类中设置了令牌。在主要活动中,我使用的是 apolloClient,我在其中传递查询以获取数据。
我从拦截器类获得 API 响应,但没有获得查询响应。
public class HttpInterceptor implements Interceptor
@Override public Response intercept(Interceptor.Chain chain) throws IOException
java.util.logging.Logger logger = java.util.logging.Logger.getLogger("okhttp");
String BASE_URL = "url_example.json";
Response response = null;
Request request = chain.request();
request =chain.request();
request = request.newBuilder()
.url(BASE_URL)
.header("token_key", "token_value")
.build();
long t1 = System.nanoTime();
logger.info(String.format("Sending request %s on %s%n%s",
request.url(), chain.connection(), request.headers()));
response = chain.proceed(request);
long t2 = System.nanoTime();
logger.info(String.format("Received response for %s in %.1fms%n%s",
response.request().url(), (t2 - t1) / 1e6d, response.headers()));
return response;
Application类代码:
private static final String BASE_URL = "url_example.json";
private ApolloClient apolloClient;
@Override public void onCreate()
super.onCreate();
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new HttpInterceptor())
.build();
apolloClient = ApolloClient.builder()
.serverUrl(BASE_URL)
.okHttpClient(okHttpClient)
.build();
public ApolloClient apolloClient()
return apolloClient;
代码或 MainActivity:
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
application = (SampleApplication) getApplication();
content = (ViewGroup) findViewById(R.id.rl_content_holder);
progressBar = (ProgressBar) findViewById(R.id.loading_bar);
RecyclerView collectionRecyclerView = (RecyclerView) findViewById(R.id.rv_collection_list);
mCollectionAdapter = new CollectionAdapter(this);
collectionRecyclerView.setAdapter(mCollectionAdapter);
collectionRecyclerView.setLayoutManager(new LinearLayoutManager(this));
fetchCollection();
ApolloCall.Callback<ShopifyCollections.Data> mDataCallback =
new ApolloCall.Callback<ShopifyCollections.Data>()
@Override
public void onResponse(@Nonnull com.apollographql.apollo.api.Response<ShopifyCollections.Data> response)
Log.i("Shopify CallBack",response.toString());
@Override
public void onFailure(@Nonnull ApolloException e)
Log.e(TAG, e.getMessage(), e);
;
public void fetchCollection()
mHttpClient = new OkHttpClient.Builder()
.addInterceptor(new HttpInterceptor())
.build();
ShopifyCollections collectionQuery = ShopifyCollections.builder()
.limit(250)
.build();
collectionCall = application.apolloClient().newCall(collectionQuery);
collectionCall.enqueue(mDataCallback);
查询:
query ShopifyCollections($limit: Int!)
shop
name
collections(first: $limit)
edges
node
title
id
image
src
【问题讨论】:
【参考方案1】:我看到您正在尝试使用 Shopify 店面 GraphQL 架构编写示例?如果是,那么您可以在以下位置找到示例:https://github.com/Shopify/mobile-buy-sdk-android/tree/develop-v3/MobileBuy/sample
它还没有完成,但可以给你一些概述。
如果问题与如何将身份验证令牌附加到标头有关:
OkHttpClient httpClient = new OkHttpClient.Builder()
.addInterceptor(chain ->
Request original = chain.request();
Request.Builder builder = original.newBuilder().method(original.method(), original.body());
builder.header("User-Agent", "Android Apollo Client");
builder.header("X-Shopify-Storefront-Access-Token", shopifyApiKey);
return chain.proceed(builder.build());
)
.build();
apolloClient = ApolloClient.builder()
.okHttpClient(httpClient)
.serverUrl(HttpUrl.parse("https://" + shopUrl + "/api/graphql"))
.withCustomTypeAdapter(CustomType.MONEY, new CustomTypeAdapter<BigDecimal>()
@Override public BigDecimal decode(final String value)
return new BigDecimal(value);
@Override public String encode(final BigDecimal value)
return value.toString();
)
.build();
【讨论】:
以上是关于android graphQL 阿波罗的主要内容,如果未能解决你的问题,请参考以下文章