2017-03-03 3 views
1

Ich versuche, die TheMovieDB API mit Retrofit zu implementieren, und ich habe Probleme beim Anhängen der API-Schlüssel an den Anfang der Abfrage. Es fühlt sich an, als wäre TheMovieDB hier schuld, weil es eine unkonventionelle Art hat, zu Beginn der Abfrage nach dem API-Schlüssel zu fragen.Anfügen von Abfrageparameter an den Start der URL mit Retrofit

Wenn versucht wird, die Anfrage abzufangen und den Abfrageparameter hinzuzufügen, so wird es an das Ende der Anfrage angehängt, was nicht das ist, was ich möchte.

private class WebApiAuthenticator implements RequestInterceptor { 
    @Override 
    public void intercept(RequestFacade request) { 
     if (apiKey != null) { 
      request.addEncodedQueryParam(PARAM_API_KEY, apiKey); 
     } 
    } 
} 

Und der Service-Implementierung: mein

---> HTTP GET https://api.themoviedb.org/3/search/multi?api_key=thisismyapikey&query=mysearchquery 

Wie gehe ich über das Hinzufügen von:

---> HTTP GET https://api.themoviedb.org/3/search/multi&query=mysearchquery?api_key=thisismyapikey 

Ich möchte dieses Ergebnis:

@GET("/search/multi&query={query}") 
    void getSearchResults(@Path("query") String query, Callback<String> callback); 

Dieses dieses Ergebnis erzeugt Abfrageparameter an den Anfang von th Die Anfrage stattdessen?

Antwort

1

Ich fand die Lösung. Anstatt das Abfangen und das Hinzufügen eines Abfrageparameters von dort, erstelle ich eine Abfrage Karte und immer meine api Schlüssel zum Dienst in einer Abfrage Karte übergeben, zusammen mit meiner Suchanfrage, wie so:

Map<String, String> data = new HashMap<>(); 
data.put("api_key", apiKey); 
data.put("query", "avengers"); 
movieService.getSearchResults(data, new Callback<String>() 
{ 
    @Override public void success(final String s, final Response response) { 
    System.out.println(s); 
    } 

    @Override public void failure(final RetrofitError error) { 
     LOGGER.log(Level.WARNING, error.getResponse().getReason()); 
    } 
}); 

Und das ist die Service-Implementierung:

@GET("/search/multi") 
void getSearchResults(@QueryMap Map<String, String> queries, Callback<String> callback); 

Dies ist das Ergebnis produziert:

---> HTTP GET https://api.themoviedb.org/3/search/multi?api_key=myapikey&query=avengers 
Verwandte Themen