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

相关推荐
关于不上作者榜就原神启动那件事2 分钟前
Java中大量数据Excel导入导出的实现方案
java·开发语言·excel
Coder_Boy_29 分钟前
基于SpringAI的在线考试系统设计总案-知识点管理模块详细设计
android·java·javascript
Assby36 分钟前
如何尽可能精确计算线程池执行 shutdown() 后的耗时?
java·后端
焰火19991 小时前
[Java]自定义重试工具类
java
冴羽2 小时前
2026 年 Web 前端开发的 8 个趋势!
前端·javascript·vue.js
SuperherRo2 小时前
JAVA攻防-Shiro专题&断点调试&有key利用链&URL&CC&CB&原生反序列化&加密逻辑
java·shiro·反序列化·有key·利用链·原生反序列化·加密逻辑
桦说编程2 小时前
简单方法实现子任务耗时统计
java·后端·监控
爱笑的眼睛112 小时前
超越可视化:降维算法组件的深度解析与工程实践
java·人工智能·python·ai
盖世英雄酱581362 小时前
物品超领取损失1万事故复盘(一)
java·后端