Android OkHttp3 封装

前言

在 Android 开发中,网络请求是一个非常常见的功能。而 OkHttp3 是一个非常强大且常用的网络请求库,可以方便地进行网络请求并处理响应数据。为了更好地使用 OkHttp3,我们可以对其进行封装,以提供更加便捷的接口和功能。本文将介绍如何封装 OkHttp3,并提供示例代码。

OkHttp3 概述

OkHttp3 是一个开源的 HTTP 客户端库,由 Square 公司开发。它基于 Java 的标准库实现,提供了简洁的 API,支持同步和异步请求,并且具有自动管理连接池、压缩、缓存等功能。OkHttp3 的设计目标是提升性能和可扩展性,并且易于使用和理解。

OkHttp3 封装

封装是一种常见的编程技术,通过隐藏复杂的实现细节,提供简化的接口,使得使用者能够更加方便地使用某个功能或库。对于 OkHttp3,我们可以封装一些常用的功能,例如设置请求头、设置超时时间、处理响应数据等。

封装请求

首先,我们可以封装一个 HttpClient 类来处理网络请求。

public class HttpClient {

    private OkHttpClient client;

    public HttpClient() {
        client = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .readTimeout(10, TimeUnit.SECONDS)
                .build();
    }

    public String get(String url) throws IOException {
        Request request = new Request.Builder()
                .url(url)
                .build();

        try (Response response = client.newCall(request).execute()) {
            return response.body().string();
        }
    }

    public void post(String url, String json) throws IOException {
        RequestBody requestBody = RequestBody.create(json, MediaType.get("application/json"));

        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();

        try (Response response = client.newCall(request).execute()) {
            // 处理响应
        }
    }

    // 更多功能封装...
}

在上面的示例中,我们封装了一个 HttpClient 类,通过它可以发送 GET 和 POST 请求。我们使用 OkHttpClient 创建一个客户端,并设置了连接和读取的超时时间。然后,我们可以通过调用 get 或者 post 方法发送请求,并处理响应数据。

封装响应

在实际开发中,我们通常需要处理服务器返回的数据。为了简化数据处理的过程,我们可以封装一个 HttpResponse 类。

public class HttpResponse {

    private int code;
    private String message;
    private String body;

    public HttpResponse(int code, String message, String body) {
        this.code = code;
        this.message = message;
        this.body = body;
    }

    public int getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }

    public String getBody() {
        return body;
    }
}

通过以上封装,我们可以将服务器返回的状态码、消息和响应体封装为一个对象,方便后续处理。

封装回调

OkHttp3 支持异步请求,并通过回调方式获取响应数据。为了封装这个过程,我们可以定义一个回调接口。

public interface HttpCallback {

    void onSuccess(HttpResponse response);

    void onFailure(IOException e);
}

然后,在 HttpClient 类中添加一个异步请求的方法。

public void getAsync(String url, HttpCallback callback) {
    Request request = new Request.Builder()
            .url(url)
            .build();

    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String body = response.body().string();
            HttpResponse httpResponse = new HttpResponse(response.code(), response.message(), body);
            callback.onSuccess(httpResponse);
        }

        @Override
        public void onFailure(Call call, IOException e) {
            callback.onFailure(e);
        }
    });
}

通过以上封装,我们可以通过回调方式获取异步请求的响应数据。

封装使用

封装好的 OkHttp3 可以提供更加简洁的接口,方便我们使用。

HttpClient client = new HttpClient();

client.getAsync(" new HttpCallback() {
    @Override
    public void