OkHttp使用指南

OkHttp使用指南

OkHttp是一个高效的HTTP客户端,支持同步和异步请求,适用于Android和Java应用。以下是一篇关于如何使用OkHttp的文章。


添加依赖

在项目的build.gradle文件中添加OkHttp依赖:

groovy 复制代码
implementation 'com.squareup.okhttp3:okhttp:4.9.3'

确保同步项目以加载依赖。


同步GET请求

发送同步GET请求需要创建一个OkHttpClient实例,构建请求并执行:

java 复制代码
OkHttpClient client = new OkHttpClient();

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

try (Response response = client.newCall(request).execute()) {
    if (response.isSuccessful()) {
        String responseBody = response.body().string();
        System.out.println(responseBody);
    }
} catch (IOException e) {
    e.printStackTrace();
}

异步GET请求

异步请求通过enqueue方法实现,回调在子线程中执行:

java 复制代码
OkHttpClient client = new OkHttpClient();

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) {
        e.printStackTrace();
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        if (response.isSuccessful()) {
            String responseBody = response.body().string();
            System.out.println(responseBody);
        }
    }
});

POST请求发送JSON数据

构建POST请求需要设置请求体和Content-Type头:

java 复制代码
OkHttpClient client = new OkHttpClient();
String json = "{\"name\":\"John\", \"age\":30}";

RequestBody body = RequestBody.create(json, MediaType.parse("application/json"));

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

try (Response response = client.newCall(request).execute()) {
    if (response.isSuccessful()) {
        System.out.println(response.body().string());
    }
} catch (IOException e) {
    e.printStackTrace();
}

文件上传

通过MultipartBody实现文件上传功能:

java 复制代码
OkHttpClient client = new OkHttpClient();
File file = new File("path/to/file.jpg");

RequestBody requestBody = new MultipartBody.Builder()
    .setType(MultipartBody.FORM)
    .addFormDataPart("file", file.getName(),
        RequestBody.create(file, MediaType.parse("image/jpeg")))
    .addFormDataPart("description", "A sample file")
    .build();

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

client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        e.printStackTrace();
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        System.out.println(response.body().string());
    }
});

拦截器使用

拦截器可以用于日志记录或修改请求/响应。以下是一个日志拦截器示例:

java 复制代码
OkHttpClient client = new OkHttpClient.Builder()
    .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
    .build();

确保在调试时使用Level.BODY,生产环境中建议关闭或使用Level.BASIC


超时设置

通过OkHttpClient.Builder可以配置连接、读取和写入超时:

java 复制代码
OkHttpClient client = new OkHttpClient.Builder()
    .connectTimeout(10, TimeUnit.SECONDS)
    .readTimeout(30, TimeUnit.SECONDS)
    .writeTimeout(30, TimeUnit.SECONDS)
    .build();

缓存配置

启用缓存可以提高性能并减少网络请求:

java 复制代码
int cacheSize = 10 * 1024 * 1024; // 10MB
Cache cache = new Cache(new File("cacheDir"), cacheSize);

OkHttpClient client = new OkHttpClient.Builder()
    .cache(cache)
    .build();

总结

OkHttp提供了简洁的API和强大的功能,适用于各种HTTP请求场景。通过合理配置拦截器、超时和缓存,可以进一步优化网络请求性能。

相关推荐
糖果店的幽灵4 分钟前
langgraph分支之 - 动态分支(Dynamic Branch)
java·前端·javascript·人工智能·langgraph
唐青枫1 小时前
Java Spring Security 实战详解:从登录认证到 JWT 权限控制
java
曹牧1 小时前
文档格式:OFD
java
齊家治國平天下1 小时前
AAOS 电源管理深度解析:休眠/唤醒/功耗优化
android·车载系统·aaos·aosp·电源管理·休眠唤醒·carpowermanager
豆角焖肉1 小时前
Maven进阶与搭建私服
java·maven
大不点wow1 小时前
Java序列化与反序列化:让对象走出JVM
java·开发语言·jvm
噢,我明白了2 小时前
Java中日期和字符串的处理
java·开发语言·日期
Xzaveir2 小时前
企业号码展示不可观测怎么办:状态机、拨测事件与异常回放
android·人工智能
dkbnull2 小时前
Spring Boot请求处理组件对比详解
java·spring boot
jun_bai2 小时前
Orthanc服务器使用java上传dicom影像文件
java·运维·服务器