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

相关推荐
CHENFU_JAVA3 分钟前
使用EasyExcel实现Excel单元格保护:自由锁定表头和数据行
java·excel
青云交1 小时前
Java 大视界 -- 基于 Java 的大数据实时流处理在智能电网分布式电源接入与电力系统稳定性维护中的应用(404)
java·大数据·分布式·智能电网·flink 实时流处理·kafka 数据采集·iec 61850 协议
仰望星空@脚踏实地2 小时前
maven scope 详解
java·maven·scope
M_Reus_112 小时前
Groovy集合常用简洁语法
java·开发语言·windows
带刺的坐椅3 小时前
10分钟带你体验 Solon 的状态机
java·solon·状态机·statemachine
小鹅叻3 小时前
MyBatis题
java·tomcat·mybatis
RainbowSea3 小时前
4. LangChain4j 模型参数配置超详细说明
java·langchain·ai编程
RainbowSea3 小时前
3. LangChain4j + 低阶 和 高阶 API的详细说明
java·llm·ai编程
叫我阿柒啊3 小时前
Java全栈开发面试实战:从基础到微服务的深度探索
java·spring boot·redis·微服务·vue3·全栈开发·面试技巧
ashane13143 小时前
Springboot 集成 TraceID
java·spring boot·spring