2017-03-04 2 views
0

Ich baue eine Android APP, wo ich die Internet Game Database API über Mashape Marktplatz verwende. Ich verwende Retrofit für die get-Anfragen und das Abrufen von Daten von der API erfordert einen API-Schlüssel.Hinzufügen von Feldern zu URL mit Retrofit

Ich habe es funktioniert, aber die API geben nur Game-IDs zurück und ich möchte die Spielnamen und andere Informationen, aber ich bin mir nicht sicher, wie Sie die Felder hinzufügen. Dies ist, wie es Mashape abfragen:

HttpResponse<String> response = Unirest.get("https://igdbcom-internet-game-database-v1.p.mashape.com/games/?fields=name%2Crelease_dates") 
.header("X-Mashape-Key", "API KEY HERE") 
.header("Accept", "application/json") 
.asString(); 

und das ist meine Retrofit-Schnittstelle

public interface GamesAPIService { 

    @GET("/games/") 
    Call<List<GamesResponse>> gameList(@Query("mashape-key") String apikey); 

} 

ich diesen

@GET("/games/?fields=name,release_dates") 

aber kein Glück zu verwenden versucht, ich habe auch versucht, mit @Field aber hat auch nicht funktioniert. Irgendwelche Ideen? Vielen Dank.

Edit: Nur um zu klären, wenn ich die "?fields=name,release_dates" Ich bekomme 401 nicht autorisierten Fehler.

+0

Warum haben Sie '@Query (" mashape-key ") String apikey'? Sie haben keinen '? Mashape-key = ...' in der URL ... Der Schlüssel muss ein Header sein, kein Abfrageparameter. –

+0

Ich versuchte @Header, um den Apikey oder in der Aktivität selbst als ".addHeader" zu übergeben und es hat nie funktioniert, aber es funktionierte so aus irgendeinem Grund, also behielt ich es. – Prime47

Antwort

1

Erstens denke ich, dass Sie alle Ihre Anfrage Mashape-Schlüssel hinzufügen müssen.

OkHttpClient httpClient = new OkHttpClient(); 
httpClient.addInterceptor(new Interceptor() { 
    @Override 
    public Response intercept(Chain chain) throws IOException { 
     Request request = chain.request().newBuilder() 
      .addHeader("X-Mashape-Key", "API_KEY_HERE") 
      .addHeader("Accept", "application/json") 
      .build(); 
     return chain.proceed(request); 
    } 
}); 
Retrofit retrofit = new Retrofit.Builder() 
    .baseUrl("https://igdbcom-internet-game-database-v1.p.mashape.com") 
    .client(httpClient) 
    .build(); 

Und dann ist dies eine Informationsabfrage.

public interface GamesAPIService { 
    @GET("/games") 
    Call<List<GamesResponse>> gameList(@Query("fields") String value); 
} 

Und letzte Sache zum Anrufen.

GamesAPIService gamesAPIService = retrofit.create(GamesAPIService.class); 

Call<List<GamesResponse>> call = gamesAPIService.gameList("name,release_dates"); 
if (call!=null){ 
    call.enqueue(new Callback<List<GamesResponse>>() { 

     @Override 
     public void onResponse(Call<List<GamesResponse>> call, Response<List<GamesResponse>> response) { 
      // handle success 
     } 

     @Override 
     public void onFailure(Throwable t) { 
      // handle failure 
     } 
    }); 
} 
Verwandte Themen