OkHttp的理解和使用

OkHttp是一个流行的开源HTTP客户端库,用于在Android和Java应用程序中进行网络请求。它提供了简洁易用的API和丰富的功能,包括同步和异步请求、文件上传和下载、缓存管理等。

下面是一个详细的OkHttp教程,帮助你理解和使用OkHttp:

1、添加依赖:

  • 在Android项目中,在app模块的build.gradle文件中添加以下依赖:

    implementation 'com.squareup.okhttp3:okhttp:4.9.1'

2、发起同步请求:

  • 创建OkHttpClient实例
java 复制代码
OkHttpClient client = new OkHttpClient();
  • 创建Request对象
java 复制代码
Request request = new Request.Builder()
    .url("http://example.com/api/data")
    .build();
  • 发起请求并获取Response
java 复制代码
try {
    Response response = client.newCall(request).execute();
    String responseData = response.body().string();
    // 处理响应数据
} catch (IOException e) {
    e.printStackTrace();
}

3、发起异步请求:

  • 创建OkHttpClient实例
java 复制代码
OkHttpClient client = new OkHttpClient();
  • 创建Request对象
java 复制代码
Request request = new Request.Builder()
    .url("http://example.com/api/data")
    .build();
  • 发起异步请求并处理回调
java 复制代码
client.newCall(request).enqueue(new Callback() {
    @Override
    public void onResponse(Call call, Response response) throws IOException {
        String responseData = response.body().string();
        // 处理响应数据
    }

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

4、发送POST请求:

  • 创建RequestBody对象
java 复制代码
RequestBody requestBody = new FormBody.Builder()
    .add("username", "admin")
    .add("password", "123456")
    .build();
  • 创建Request对象并指定POST方法
java 复制代码
Request request = new Request.Builder()
    .url("http://example.com/api/login")
    .post(requestBody)
    .build();
  • 发起请求并获取Response,处理响应数据同步或异步方式与前面相同

文件上传和下载:

  • 文件上传:
java 复制代码
MediaType mediaType = MediaType.parse("application/octet-stream");
RequestBody requestBody = new MultipartBody.Builder()
    .setType(MultipartBody.FORM)
    .addFormDataPart("file", file.getName(), RequestBody.create(mediaType, file))
    .build();

Request request = new Request.Builder()
    .url("http://example.com/api/upload")
    .post(requestBody)
    .build();
  • 文件下载:
java 复制代码
Request request = new Request.Builder()
    .url("http://example.com/files/image.jpg")
    .build();

client.newCall(request).enqueue(new Callback() {
    @Override
    public void onResponse(Call call, Response response) throws IOException {
        InputStream inputStream = response.body().byteStream();
        // 保存文件到本地
    }

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

6、缓存管理:

  • 创建OkHttpClient实例,并配置缓存目录和大小:
java 复制代码
int cacheSize = 10 * 1024 * 1024; // 10 MB
Cache cache = new Cache(context.getCacheDir(), cacheSize);

OkHttpClient client = new OkHttpClient.Builder()
    .cache(cache)
    .build();
  • 在Request对象中添加缓存控制:
java 复制代码
Request request = new Request.Builder()
    .url("http://example.com/api/data")
    .cacheControl(CacheControl.FORCE_NETWORK) // 强制忽略缓存
    .build();

这些是OkHttp的基本使用方法和常见功能示例。你可以根据自己的需求和具体场景进行进一步的学习和扩展。

相关推荐
摇滚侠6 分钟前
JAVA 项目教程《苍穹外卖-12》,微信小程序项目,前后端分离,从开发到部署
java·开发语言·vue.js·node.js
楚国的小隐士22 分钟前
为什么说Rust是对自闭症谱系人士友好的编程语言?
java·rust·编程·对比·自闭症·自闭症谱系障碍·神经多样性
Timer@41 分钟前
LangChain 教程 04|Agent 详解:让 AI 学会“自己干活“
javascript·人工智能·langchain
春花秋月夏海冬雪1 小时前
代码随想录刷题 - 贪心Part1
java·算法·贪心·代码随想录
野生技术架构师1 小时前
2026年牛客网最新Java面试题总结
java·开发语言
阿珊和她的猫1 小时前
TypeScript中的never类型: 深入理解never类型的使用场景和特点
javascript·typescript·状态模式
Mr_Xuhhh1 小时前
深入理解Java抽象类与接口:从概念到实战
java·开发语言
wb043072011 小时前
使用 Java 开发 MCP 服务并发布到 Maven 中央仓库完整指南
java·开发语言·spring boot·ai·maven
Rsun045511 小时前
设计模式应该怎么学
java·开发语言·设计模式
5系暗夜孤魂2 小时前
系统越复杂,越需要“边界感”:从 Java 体系理解大型工程的可维护性本质
java·开发语言