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请求场景。通过合理配置拦截器、超时和缓存,可以进一步优化网络请求性能。

相关推荐
独自破碎E2 小时前
LCR003-比特位计数
java·开发语言
梵得儿SHI2 小时前
(第九篇)Spring AI 核心技术攻坚:安全防护 企业级 AI 应用的风控体系之全链路防护(API 安全到内容合规)
java·人工智能·安全·spring·安全防护·springai·企业级ai
pcm1235672 小时前
设计C/S架构的IM通信软件(2)
java·c语言·架构
砚边数影2 小时前
逻辑回归实战(一):用户流失预测数据集设计,KingbaseES存储标签数据
java·人工智能·算法·机器学习·逻辑回归·线性回归·金仓数据库
天人合一peng2 小时前
unity获得和修改button的text(TMP)
java·前端·unity
Xxtaoaooo2 小时前
React Native 跨平台鸿蒙开发实战:调试与真机测试全流程
android·react native·harmonyos
TheNextByte12 小时前
将视频从电脑传输到Android (超简单指南)
android·电脑·音视频
TheNextByte12 小时前
如何将照片从Android手机传输到Chromebook电脑
android·智能手机·电脑
九皇叔叔2 小时前
【07】SpringBoot3 MybatisPlus 删除(Mapper)
java·开发语言·mybatis·mybatis plus