OkHttpUtils 的全面使用指南,整合多个来源的最佳实践,涵盖依赖配置、基础请求、文件操作、高级功能及注意事项,帮助开发者快速上手并避免常见问题。
一、依赖配置
在项目的 build.gradle 中添加依赖:
dependencies {
// 核心库(必选)
implementation 'com.lzy.net:okhttputils:3.0.4'
// 扩展库(按需添加)
implementation 'com.lzy.net:okrx2:2.0.2' // RxJava2 支持
implementation 'com.lzy.net:okserver:2.0.5' // 下载/上传管理
}
二、基本使用
1. GET 请求
OkHttpUtils.get("https://api.example.com/data")
.tag(this) // 设置请求标签(用于取消)
.params("page", "1") // 添加URL参数
.headers("Authorization", "token123") // 添加请求头
.execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
// 请求成功处理
String data = response.body();
}
@Override
public void onError(Response<String> response) {
// 请求失败处理
}
});
2. POST 请求(表单)
Map<String, String> params = new HashMap<>();
params.put("username", "admin");
params.put("password", "123456");
OkHttpUtils.post("https://api.example.com/login")
.tag(this)
.params(params) // 添加表单参数
.execute(new JsonCallback<User>(User.class) { // 自动解析为JavaBean
@Override
public void onSuccess(Response<User> response) {
User user = response.body();
}
});
3. POST JSON 数据
String json = new Gson().toJson(new User("admin", "123456"));
OkHttpUtils.post("https://api.example.com/login")
.postJson(json) // 直接提交JSON字符串
.execute(new StringCallback());
4. 文件上传
File file = new File(Environment.getExternalStorageDirectory(), "test.jpg");
OkHttpUtils.post("https://api.example.com/upload")
.addFile("file", file.getName(), file) // 参数名、文件名、文件对象
.execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
// 上传成功
}
});
5.文件下载
OkHttpUtils.get("https://example.com/file.zip")
.execute(new FileCallback("/sdcard/download/", "file.zip") {
@Override
public void onSuccess(Response<File> response) {
File file = response.body(); // 下载完成
}
@Override
public void downloadProgress(long currentSize, long totalSize, float progress) {
// 进度回调(UI线程)
progressBar.setProgress((int) (100 * progress));
}
});
6.高级功能,全局配置
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
OkHttpUtils.init(this);
OkHttpUtils.getInstance()
.setConnectTimeout(30_000) // 连接超时
.setReadTimeout(30_000) // 读取超时
.addCommonHeader("App-Version", BuildConfig.VERSION_NAME) // 公共请求头
.setCertificates(getAssets().open("server.cer")); // HTTPS自签名证书[1](@ref)
}
}
7.高级功能,配置拦截器
public class TokenInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.header("token", "user_token")
.build();
return chain.proceed(request);
}
}
// 配置拦截器
OkHttpClient client = OkHttpUtils.getInstance().getOkHttpClient()
.newBuilder()
.addInterceptor(new TokenInterceptor())
.build();
OkHttpUtils.initClient(client);
2776

被折叠的 条评论
为什么被折叠?



