2017-02-27 73 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);}