2
votes

I'm using apollo-GraphQL for API response. I have set token in Interceptor class. In main activity I'm using apolloClient, in which I'm passing query to fetch data.

I'mm getting API response from interceptor class but not getting query response.

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;
    }

code of Application class:

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;
}

code or 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 :

query ShopifyCollections($limit: Int!){
    shop{
        name
        collections(first: $limit)
{
            edges{
                node{
                    title
                    id
                  image{
                    src
                  }
                }
            }
        }
    }
}
1

1 Answers

2
votes

I see you are trying to write example with Shopify storefront GraphQL schema? If yes then you can find example at: https://github.com/Shopify/mobile-buy-sdk-android/tree/develop-v3/MobileBuy/sample

It's not finished yet but can give you some overview.

If the question is related how to attach auth token to the header:

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();