关于okhttp框架的基本使用

关于okhttp框架的基本使用(上传文件,上传参数)

1、关于网络权限配置

关于安卓(27以上)http访问的配置
访问为https协议的话,略过即可

如果在android27以上,默认是不支持Http访问的了,需要使用https,如果你要使用Http明文访问,那么需要配置一下清单文件。

在清单文件,application节点,添加

android:networkSecurityConfig="@xml/network_security_config"

关于network_security_config文件

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">自己的域名</domain>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">自己的域名</domain>
            <domain includeSubdomains="true">自己的域名</domain>
        </domain-config>
    </domain-config>
</network-security-config>

此外还需要声明相关的网络权限和依赖:

权限: <uses-permission android:name="android.permission.INTERNET" />

依赖:在gradle文件:  implementation("com.squareup.okhttp3:okhttp:4.2.2")

2、okhttp框架的实践

//GET请求
public void asyncGet(View view) {
        String url = "某个get请求地址";
        //1、创建client
        OkHttpClient okHttpClient = new OkHttpClient();
        //2、创建请求内容
        Request request = new Request.Builder()
                .url(url)
                .get()
                .build();
        //3、用浏览器创建调用任务
        Call call = okHttpClient.newCall(request);
        //4、执行异步任务
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call,@NotNull IOException e) {
                Log.d(TAG,"onFailure " + e.toString());
            }

            @Override
            public void onResponse(@NotNull Call call,@NotNull Response response) throws IOException {
                Log.d(TAG,"response " + response.body().string());
                //异步处理返回数据后,在这里进行进行数据更新操作,例如利用handle更新ui等
            }
        });
    }
//POST请求
public void doSearch(View view) {
        String url = "需要post的uri";
        RequestBody requestBody = new FormBody.Builder()
                .add("test","test")
                .build();
                
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)//post请求要求输入一个RequestBody对象
                .build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call,@NotNull IOException e) {
                Log.d(TAG,"onFailure " + e.toString());
            }

            @Override
            public void onResponse(@NotNull Call call,@NotNull Response response) throws IOException {
                Log.d(TAG,"response " + response.body().string());
            }
        });
    }

在上述代码中
RequestBody继承关系
我们可以看到如上的继承关系,所以在post请求中的RequeBody需要根据情况实例化
RequestBody requestBody = new FormBody.Builder()//表单式提交后面可以通过"."查看相应的参数
RequestBody requestBody = new MultipartBody.Builder()//一般用于文件提交/多文件提交等,其中里面涉及相关的类型设置,请自行查阅相关的文档
RequestBody requestBody = RequesBody.create()//一般用于单个参数的提交

//文件上传
 public void postFile(View view) {
        String url = "自己的url'";
        OkHttpClient httpClient = new OkHttpClient.Builder().build();
        File file = new File("文件路径");
        MediaType mediaType = MediaType.parse("文件类型");
        RequestBody fileBody = RequestBody.create(file,mediaType);
        RequestBody requestBody = new MultipartBody.Builder()
                .addFormDataPart("后台接口key",file.getName(),fileBody)//可以多个,在多文件上传运用
                .build();
        Request request = new Request.Builder().url(url).post(requestBody).build();
        Call call = httpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call,@NotNull IOException e) {
                Log.d(TAG,"上传失败 " + e.toString());
            }

            @Override
            public void onResponse(@NotNull Call call,@NotNull Response response) throws IOException {
                Log.d(TAG,"上传结果:" + response.body().string());
                //处理其他
            }
        });
    }

基本的okhhtp基本运用展示到此结束,该框架帮我们实现了配置请求体的工作,有兴趣的朋友可以查看框架的原理实现。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值