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的基本使用方法和常见功能示例。你可以根据自己的需求和具体场景进行进一步的学习和扩展。

相关推荐
白叔King几秒前
aardio时间日期转换中文时间
前端·javascript·aardio
qq_333120975 分钟前
头歌答案--爬虫实战
java·前端·爬虫
TT哇6 分钟前
【项目】从“本地能跑”到“生产级部署”:Java + Docker 自动化部署深度复盘
java·docker·自动化
摇滚侠7 分钟前
JAVA 项目教程《苍穹外卖-11》,微信小程序项目,前后端分离,从开发到部署
java·开发语言·微信小程序
muls19 分钟前
java面试宝典
java·linux·服务器·网络·算法·操作系统
执笔论英雄9 分钟前
【vllm】vllm根据并发学习调度
java·学习·vllm
瑶总迷弟10 分钟前
Python入门第6章:字典(键值对数据结构)
java·数据结构·python
斯班奇的好朋友阿法法13 分钟前
ollama离线导入大模型
服务器·前端·javascript
o丁二黄o23 分钟前
【MyBatisPlus】MyBatisPlus介绍与使用
java
_MyFavorite_26 分钟前
JAVA重点基础、进阶知识及易错点总结(14)字节流 & 字符流
java·开发语言·python