Android 之 网络请求 - OkHttp

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);

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值