OkHttp 是一个强大的 HTTP 客户端库,用于 Android 应用程序中发送请求和接收响应。它由 Square 开发,以其高效和易于使用而闻名。本文将带你轻松学会使用 OkHttp,重点介绍如何发送各种 HTTP 请求以及如何处理回调。

OkHttp 基础

1. 添加依赖

要在你的 Android 项目中添加 OkHttp,首先需要在 build.gradle 文件中添加以下依赖:

dependencies {
    implementation 'com.squareup.okhttp3:okhttp:4.9.3'
}

2. 创建 OkHttpClient

OkHttp 使用 OkHttpClient 来发送请求。创建一个客户端实例如下:

OkHttpClient client = new OkHttpClient();

3. 发送 GET 请求

发送 GET 请求非常简单,使用 client.newCall() 方法:

Request request = new Request.Builder()
    .url("https://api.example.com/data")
    .build();

client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        // 处理请求失败
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        // 处理请求成功
    }
});

HTTP 请求类型

除了 GET 请求,OkHttp 还支持其他 HTTP 方法,如 POST、PUT、DELETE 等。以下是发送 POST 请求的示例:

RequestBody body = RequestBody.create("key=value".getBytes(), MediaType.parse("application/x-www-form-urlencoded"));

Request request = new Request.Builder()
    .url("https://api.example.com/post")
    .post(body)
    .build();

client.newCall(request).enqueue(new Callback() {
    // ... 处理响应 ...
});

处理回调

OkHttp 使用回调模式来处理响应。在上面的例子中,我们实现了 Callback 接口的 onResponseonFailure 方法。这是处理 HTTP 请求响应的标准方式。

1. onResponse 方法

当请求成功时,onResponse 方法会被调用。你可以在这里读取响应体:

Response response = call.response();
ResponseBody responseBody = response.body();
String responseStr = responseBody.string();

2. onFailure 方法

如果请求失败,onFailure 方法会被调用。你可以在这里处理错误:

IOException e = (IOException) throwable;
// 处理错误

进阶技巧

1. 使用拦截器

OkHttp 拦截器允许你在请求和响应的各个阶段添加自定义逻辑。例如,你可以使用拦截器添加请求头或从响应中提取某些信息。

client.newBuilder()
    .addNetworkInterceptor(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            Request newRequest = request.newBuilder()
                .header("Authorization", "Bearer token")
                .build();
            return chain.proceed(newRequest);
        }
    })
    .build();

2. 缓存

OkHttp 提供了强大的缓存机制。你可以配置缓存策略,以便重用响应,从而减少网络请求次数。

int cacheSize = 10 * 1024 * 1024; // 10 MiB
Cache cache = new Cache(new File(getCacheDir(), "http_cache"), cacheSize);
client.newBuilder()
    .cache(cache)
    .build();

总结

通过本文的介绍,你应该已经对 OkHttp 有了一个基本的了解,并学会了如何发送各种 HTTP 请求以及处理回调。OkHttp 是 Android 开发中不可或缺的工具之一,掌握它将使你在网络编程方面更加得心应手。继续实践和学习,你将能够利用 OkHttp 的强大功能来提升你的应用程序性能。