gpt4 book ai didi

android - 在 Retrofit 2 中传递 API key - Android Studio

转载 作者:太空狗 更新时间:2023-10-29 13:09:48 25 4
gpt4 key购买 nike

我正在开发一个使用 Retrofit 2 和 The Movie Database API 3 的 android 应用程序。我不确定如何正确传递 API key ,我尝试使用 @Header 注释并尝试向 httpClient 添加新的拦截器仍然没有。

我尽可能多地进行了研究,但没有任何帮助。这是我的 API 接口(interface):

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

这是我的 Activity 中的内容(顺便说一句,它是 ViewPager 中的一个 fragment ):

    @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 方面,我是一个初学者,所以我可能遗漏了一些东西。感谢您的帮助!

最佳答案

所有上述方法都是正确的,但是如果查询参数是 api key ,那么您必须在每个端点中手动添加它,这听起来很糟糕......我们可以一次性完成,无需添加 api key 您每次的查询参数。您可以通过向 OkHttpClient 添加一个新的请求拦截器来做到这一点。拦截实际请求并获取 HttpUrl。 http url 需要添加查询参数,因为它将通过附加查询参数名称及其值来更改先前生成的请求 url。

override fun getOkHttpClientBuilder(): OkHttpClient.Builder {
val okHttpBuilder = super.getOkHttpClientBuilder()
okHttpBuilder.addInterceptor { chain ->
val request = chain.request().newBuilder()
val originalHttpUrl = chain.request().url
val url = originalHttpUrl.newBuilder().addQueryParameter("api_key", "your api key value").build()
request.url(url)
val response = chain.proceed(request.build())
return@addInterceptor response
}
return okHttpBuilder
}

关于android - 在 Retrofit 2 中传递 API key - Android Studio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42491733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com