2017-03-03 60 views
1

我試圖使用Retrofit實現TheMovieDB API,並且遇到了將api鍵追加到查詢開頭的問題。感覺像TheMovieDB在這裏有錯誤,因爲在查詢開始時有一種非傳統的方式來詢問api密鑰。使用Retrofit追加查詢參數到URL的起始

當試圖截獲請求並添加查詢參數時,它會被追加到請求的末尾,這不是我想要的。

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

,服務實現:

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

這會產生這樣的結果:

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

我想這樣的結果:

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

如何去增加我的查詢參數到th的開頭請求呢?

回答

1

我找到了解決方案。 ,而不再截獲,並從那裏添加查詢參數的,我創建了一個查詢的地圖,總是通過我的API密鑰的服務在查詢地圖,我的搜索查詢一起,就像這樣:

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

這是服務實現:

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

這產生的結果:

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