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

相关推荐
梦想的颜色4 小时前
TypeScript 完全指南(下):从类型体操到生产级配置
前端·javascript·typescript
刀法如飞5 小时前
AI时代:DDD领域驱动建模与Ontology语义建模的区别
java·设计模式·架构
jeffer_liu5 小时前
Spring AI 生产级实战:工具调用
java·人工智能·后端·spring·ai编程
比昨天多敲两行5 小时前
linux 线程概念与控制
java·开发语言·jvm
8Qi85 小时前
LeetCode 75:颜色分类(荷兰国旗问题)—— Java 题解 ✅
java·算法·leetcode·指针·排序
zzhongcy5 小时前
@Transactional 同类内部调用失效 + 两种自代理解决方案
java
AutumnWind04206 小时前
【Intelij IDEA使用手册】
java·ide·intellij-idea
888CC++6 小时前
如何在 C 语言中进行程序调试?
前端·javascript·算法
就叫_这个吧7 小时前
Java注解、元注解、自定义注解定义及应用
java·开发语言·注解
Sam_Deep_Thinking7 小时前
聊聊Java中的of
java·开发语言·架构