2017-02-27 20 views
2

我正在開發一個android應用程序,我使用的是Retrofit 2和Movie Database API 3.我不確定如何正確傳遞API密鑰,我嘗試使用@Header註釋並嘗試向httpClient添加新的攔截器,但仍然沒有。在改造2中傳遞API密鑰 - Android Studio

我儘可能多的研究,但沒有任何幫助。 以下是我對API接口:

public interface MoviesAPIService { 
@GET("discover/movie?api_key={api_key}") 
Call<List<MoviesResponse>> movieList(@Header("api_key") String api_key);} 

以下是我在我的活動(其在ViewPager片段BTW):

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.movies_fragment, container, false); 

    movieListView = (ListView) rootView.findViewById(R.id.movieListView); 

    final OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); 

    OkHttpClient client = httpClient.build(); 

    final Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(BASE_URL) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .client(client) 
      .build(); 


    MoviesAPIService moviesAPIService = retrofit.create(MoviesAPIService.class); 
    Call<List<MoviesResponse>> call = moviesAPIService.movieList(apiKey); 
    call.enqueue(new Callback<List<MoviesResponse>>() { 
     @Override 
     public void onResponse(Call<List<MoviesResponse>> call, retrofit2.Response<List<MoviesResponse>> response) { 
      Log.d(TAG, "onResponse: " + response.body()); 
     } 

     @Override 
     public void onFailure(Call<List<MoviesResponse>> call, Throwable t) { 

     } 
    }); 
    return rootView; 
} 

我有許多不同的錯誤,這取決於什麼我測試,以及與此代碼,我目前得到這個:

URL query string "api_key={api_key}" must not have replace block. For dynamic query parameters use @Query. 

我很初學者當涉及到的API,所以也許我失去了一些東西。 謝謝你的幫助!

+1

刪除'API_KEY =從您的註釋和變化'@Header( 「API_KEY」)''來@Query( 「API_KEY」){} API_KEY''一樣的錯誤提示? (_For動態查詢參數使用@Query_) – maciekjanusz

+0

非常感謝您的幫助,當我這樣做時不會輸出任何內容。沒有錯誤,但日誌不會輸出任何響應主體...不知道如何繼續... – user6828332

+0

我使用Retrofit2進行Firebase消息授權。嘗試看我的問題http://stackoverflow.com/questions/42454986/firebase-device-to-device-messaging-using-retrofit-how-do-i-get-message-id – eurosecom

回答

1

遲到的答案,但我希望這有助於任何人遇到此問題。

當您想要將變量添加到api路徑時,您需要添加@Path表示法。你的情況應該是:

@GET("discover/movie?api_key={api_key}") 
Call<List<MoviesResponse>> movieList(@Path("api_key") String api_key);}