2017-05-16 4 views
2

Ich verwende Apollo-GraphQL für API-Antwort. Ich habe Token in der Interceptor-Klasse gesetzt. In der Hauptaktivität verwende ich apolloClient, in dem ich eine Abfrage übergebe, um Daten zu holen.android graphQL apollo

I'mm bekommen API-Antwort von Interceptor-Klasse, aber keine Abfrage Antwort erhalten.

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 Anwendungsklasse:

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

Abfrage:

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

Antwort

1

Ich sehe Sie versuchen Beispiel mit Shopify Schaufenster zu schreiben GraphQL Schema? Wenn ja, finden Sie ein Beispiel unter: https://github.com/Shopify/mobile-buy-sdk-android/tree/develop-v3/MobileBuy/sample

Es ist noch nicht fertig, aber kann Ihnen einen Überblick geben.

Wenn die Frage bezieht, wie Auth-Token an den Header anhängen:

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