retrofit 二次封装
时间: 2023-12-03 11:28:33 浏览: 155
Retrofit是一个非常流行的网络请求库,但是在实际开发中,我们经常需要对其进行二次封装,以便于更好地满足我们的业务需求。下面是一个简单的Retrofit二次封装示例:
首先,我们需要创建一个RetrofitClient类用于创建和管理Retrofit对象。
```java
public class RetrofitClient {
private static final String BASE_URL = "https://api.example.com/";
private static RetrofitClient instance;
private Retrofit retrofit;
private RetrofitClient() {
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
httpClient.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
Request request = original.newBuilder()
.header("Accept", "application/json")
.method(original.method(), original.body())
.build();
return chain.proceed(request);
}
});
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient.build())
.build();
}
public static synchronized RetrofitClient getInstance() {
if (instance == null) {
instance = new RetrofitClient();
}
return instance;
}
public ApiService getApiService() {
return retrofit.create(ApiService.class);
}
}
```
上述代码中,我们创建了一个RetrofitClient单例类,并在构造方法中创建了一个OkHttpClient对象,并添加了一个Interceptor拦截器。这个拦截器用于添加请求头,以便于在请求数据时能够正确地解析json格式的数据。我们还创建了一个Retrofit对象,并指定了其基础URL、解析工厂和OkHttpClient对象。
接下来,我们需要创建一个ApiService接口,用于定义我们的网络请求接口。
```java
public interface ApiService {
@GET("users")
Call<List<User>> getUsers();
}
```
上述代码中,我们定义了一个getUsers方法,用于获取用户列表。我们使用了Retrofit的注解方式,指定了请求方式和请求路径。
最后,我们需要创建一个DataManager类,用于封装我们的网络请求操作。
```java
public class DataManager {
private ApiService apiService;
public DataManager() {
apiService = RetrofitClient.getInstance().getApiService();
}
public void getUsers(final OnDataLoadedListener listener) {
Call<List<User>> call = apiService.getUsers();
call.enqueue(new Callback<List<User>>() {
@Override
public void onResponse(Call<List<User>> call, Response<List<User>> response) {
if (response.isSuccessful()) {
List<User> users = response.body();
if (listener != null) {
listener.onDataLoaded(users);
}
} else {
if (listener != null) {
listener.onDataLoadFailed(response.message());
}
}
}
@Override
public void onFailure(Call<List<User>> call, Throwable t) {
if (listener != null) {
listener.onDataLoadFailed(t.getMessage());
}
}
});
}
}
```
上述代码中,我们创建了一个DataManager类,并在构造方法中获取ApiService对象。我们还定义了一个getUsers方法,用于请求用户列表数据。我们使用了Retrofit的异步请求方式,并在回调函数中处理请求结果。如果请求成功,我们会将获取到的数据通过OnDataLoadedListener回调接口返回给调用方。如果请求失败,我们会将失败信息通过OnDataLoadedListener回调接口返回给调用方。
这样,我们就完成了一个简单的Retrofit二次封装。在实际开发中,我们可以根据业务需求对其进行更加复杂的封装。
阅读全文