Android Retrofit2+OkHttp3 搭建与使用详解

1 下载量 104 浏览量 更新于2024-08-31 收藏 74KB PDF 举报
"这篇文章除了介绍如何在Android项目中使用Retrofit2和OkHttp3,还展示了如何配置Build.gradle文件以及如何封装服务创建类。" 在Android应用开发中,Retrofit2和OkHttp3是两个非常重要的库,它们分别用于处理网络请求和网络连接。Retrofit2提供了一个简洁的接口,使得网络调用如同调用本地方法一样方便,而OkHttp3则是一个高效的HTTP客户端,能提升网络请求的性能。 使用前准备 在开始使用Retrofit2和OkHttp3之前,首先要在项目的`build.gradle`文件中添加相应的依赖。以下是配置的示例: ```groovy dependencies { implementation 'com.squareup.retrofit2:retrofit:2.0.0' implementation 'com.squareup.retrofit2:converter-gson:2.0.0' implementation 'com.squareup.okhttp3:logging-interceptor:3.2.0' } ``` 这里,`retrofit:2.0.0`是Retrofit的基础库,`converter-gson:2.0.0`是Gson转换器,它允许我们将JSON数据自动转换为Java对象。`logging-interceptor:3.2.0`是OkHttp3的日志拦截器,可以打印网络请求和响应的详细信息,便于调试。 网络框架搭建 接下来是搭建网络框架的关键步骤。创建一个名为`ServiceGenerator`的类,该类通常用于封装服务的创建和配置。在这个类中,定义了基础URL(`API_BASE_URL`)、读取超时时间(`READ_TIMEOUT`)、写入超时时间(`WRIT_TIMEOUT`)和连接超时时间(`CONNECT_TIMEOUT`)。 ```java public class ServiceGenerator { public static final String API_BASE_URL = ""; // 填写实际的API基础地址 public static int READ_TIMEOUT = 60; public static int WRIT_TIMEOUT = 60; public static int CONNECT_TIMEOUT = 60; private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder() .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS) // 设置读取超时时间 .writeTimeout(WRIT_TIMEOUT, TimeUnit.SECONDS) // 设置写的超时时间 .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS); private static Retrofit.Builder builder = new Retrofit.Builder() .baseUrl(API_BASE_URL) .addConverterFactory(GsonConverterFactory.create()); public static <S> S createService(Class<S> serviceClass) { return createService(serviceClass, null); } public static <S> S createService(Class<S> serviceClass, final String authToken) { if (authToken != null) { httpClient.addInterceptor(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request originalRequest = chain.request(); Request authenticatedRequest = originalRequest.newBuilder() .header("Authorization", "Bearer " + authToken) .build(); return chain.proceed(authenticatedRequest); } }); } OkHttpClient client = httpClient.build(); Retrofit retrofit = builder.client(client).build(); return retrofit.create(serviceClass); } } ``` 在`ServiceGenerator`类中,我们创建了一个`OkHttpClient.Builder`实例来设置超时时间和添加拦截器。`Retrofit.Builder`用于配置Retrofit实例,如设置基础URL和转换器。`createService`方法用于生成特定服务的Retrofit接口实例,如果提供了`authToken`,则会添加一个拦截器,用于在每个请求头中添加认证信息。 服务接口定义 在你的项目中,你需要为每个API定义一个接口,这个接口继承自Retrofit的`Service`。例如,如果你有一个获取用户信息的API,你可以定义如下: ```java public interface UserService { @GET("users/{userId}") Call<User> getUser(@Path("userId") int userId); } ``` 在这里,`@GET`注解标记了这是一个GET请求,`"users/{userId}"`是请求的路径,`@Path("userId")`用于动态替换URL中的`{userId}`部分。 发起网络请求 最后,通过以下方式发起网络请求: ```java UserService userService = ServiceGenerator.createService(UserService.class); Call<User> call = userService.getUser(12345); call.enqueue(new Callback<User>() { @Override public void onResponse(Call<User> call, Response<User> response) { if (response.isSuccessful()) { User user = response.body(); // 处理返回的用户信息 } else { // 处理错误状态码 } } @Override public void onFailure(Call<User> call, Throwable t) { // 处理网络请求失败 } }); ``` 这就是Retrofit2和OkHttp3在Android应用中的基本使用方式。通过这种方式,你可以轻松地处理HTTP请求,而无需关心底层的网络细节,同时还能利用OkHttp3提供的高性能网络连接。