gpt4 book ai didi

android - 在哪个类中创建 Retrofit 实例?

转载 作者:行者123 更新时间:2023-12-02 12:12:15 25 4
gpt4 key购买 nike

我到处搜索,看到的教程与Retrofit给出的文档不符。我认为这是一个愚蠢的问题,因为我一直无法找到答案。我是 Android 编程新手。

我正在关注Codepath's guide我在上面写着的部分:

创建 Retrofit 实例

To send out network requests to an API, we need to use the [Retrofit 
builder] class and specify the base URL for the service.

// Trailing slash is needed
public static final String BASE_URL = "http://api.myservice.com/";
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();

我不知道将该类放入哪个类中。或者我应该为其创建一个新类吗?

最佳答案

乔纳森给了你很多代码,但我认为你的问题更多是入门级的“我如何使用它?”问题,对吗?

所以基本上您发布的代码创建了一个 Retrofit 实例。它是一个能够创建api接口(interface)对象的对象。一个 Retrofit 对象处理一个基本 URL。

您可以通过创建接口(interface)来定义 API 端点和预期响应。使用网站上的示例:

端点接口(interface)

public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}

然后,使用您创建的 Retrofit 实例,您可以通过调用来实例化该接口(interface)的实现

GitHubService service = retrofit.create(GitHubService.class);

并且只需通过调用向 api 发送请求

Call<List<Repo>> repos = service.listRepos("octocat");
repos.enqueue(callback) //add a callback where you can handle the response

Jonathan 发布的示例使用 RxJava 调用适配器,但您现在应该跳过该部分,以便自己更轻松。

编辑:添加评论中请求的示例。

对于此 api 端点 --> https://api.textgears.com/check.php?text=I+is+an+enggeneer!&key=DEMO_KEY

你需要

@GET("check.php")
Call<YourResponseClass> performCheck(@Query("text") String text, @Query("key") apiKey);

这也是一个有趣的情况,因为您肯定需要将 apiKey 添加到每个请求中。但每次都手动将其添加为参数并不是一个好习惯。有一个解决方案 - Interceptor

public class ApiKeyRequestInterceptor implements Interceptor {

@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
final HttpUrl newUrl = request.url().newBuilder()
.addQueryParameter(Constants.API.PARAM_API_KEY, BuildConfig.NEWS_API_KEY) //add your api key here
.build();
return chain.proceed(request.newBuilder()
.url(newUrl)
.build());
}
}

并告诉 Retrofit 使用它(构建一个 OkHttpClient)

OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new ApiKeyRequestInterceptor())
.build();

Retrofit = new Retrofit.Builder()
.baseUrl(Constants.API.BASE_URL)
.client(client)
.build();

在这种情况下,您的 key 不需要额外的字段,您可以将方法简化为

Call<YourResponseClass> performCheck(@Query("text") String text);

关于android - 在哪个类中创建 Retrofit 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43790048/

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