OkHttp--Get和post的同步请求、异步请求

Content-Type:application/x-www-form-urlencoded 数据被编码为名称/值对,默认类型

Content-Type:multipart/form-data 数据被为一条信息,一般用于文件上传;

Content-Type:application/octet-stream 提交二进制数据,如果用于文件上传,只能上传一个文件

Content-Type:application/json 提交json数据

Get同步请求:

安卓当中要完成Get同步请求网络的请求必须要启动一个子线程
Request 创建请求对象
Builder() 构建器
url(url) 服务器的域名
build 返回请求对象Request实例对象
Call 准备好请求的对象
okHttpClient.newCall(request) 得到一个准备好请求的Call对象
call.execute() 调用execute进行同步请求,得到一个请求响应对象
Response 请求响应对象

//Get同步请求
        findViewById(R.id.bt1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // public void getSync(View view){
                //安卓当中要完成网络的请求必须要启动一个子线程
                new Thread() {
                    @Override
                    public void run() {

                        //创建请求对象,url参数为域名
                        //build返回Request实例对象
                        Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").build();
                        //得到一个准备好请求的Call对象
                        Call call = okHttpClient.newCall(request);

                        try {
                            //调用execute进行同步请求
                            //得到一个请求响应
                            Response response = call.execute();
                            //response.body()得到响应数据然后输入
                            Log.i("TAG", "Get同步请求" + response.body().string());
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }.start();
                //}
            }
        });

Get异步请求:

call.enqueue 异步请求,传入回调对象
Callback 回调对象,需要重写onFailure请求失败的回调和onResponse结束的回调,只代表和服务器的请求结束


        //Get异步请求
        findViewById(R.id.bt2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //创建请求对象,url参数为域名
                //build返回Request实例对象
                Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").build();
                //得到一个准备好请求的Call对象
                Call call = okHttpClient.newCall(request);
                //enqueue异步请求,传入回调对象
                //Callback回调对象
                call.enqueue(new Callback() {
                    @Override
                    //onFailure请求失败的回调
                    public void onFailure(Call call, IOException e) {

                    }

                    @Override
                    //onResponse结束的回调,只代表和服务器的请求结束
                    public void onResponse(Call call, Response response) throws IOException {
                        //this.code >= 200 && this.code < 300;//code200-299表示是成功的
                        if (response.isSuccessful()) {//判断是否返回成功
                            Log.i("TAG", "Get异步请求" + response.body().string());
                        }
                    }
                });
            }
        });


post同步请求:

FormBody 代表一个form表单的请求体(就是需要提交的数据)通过构建器访问add添加数据(以键值对存储)

post(requestBody) 需要在请求对象(Request)中表名是用post方式请求,默认是Get请求。参数是定义的一些上传的数据或文件和上传文件的规则

调用execute进行同步请求(同上)

//post同步请求
        findViewById(R.id.bt3).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new Thread(){
                    @Override
                    public void run() {
                        //代表一个form表单的请求体(就是需要提交的数据)
                        // 使用add添加值
                        //build返回form表单的请求
                        FormBody formBody=new FormBody.Builder().add("a","1").add("b","2").build();

                        //创建请求对象,url参数为域名
                        //post() 默认就是get请求,所以要指明是post请求。post参数:必须传入一个请求体new RequestBody()
                        //build返回Request实例对象
                        Request request=new Request.Builder().url("https://www.httpbin.org/post").post(formBody).build();
                        //得到一个准备好请求的Call对象
                        Call call=okHttpClient.newCall(request);
                        try {
                            //调用execute进行同步请求
                            //得到一个请求响应
                            Response response=call.execute();
                            Log.i("TAG", "post同步请求"+response.body().string());
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }.start();
            }
        });

post异步请求:
和同步请求差不多一致。
enqueue异步请求,传入回调对象。(看Get请求调用异步)


        //post异步请求
        findViewById(R.id.bt4).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //代表一个form表单的请求体(就是需要提交的数据)
                // 使用add添加值
                //build返回form表单的请求
                FormBody formBody=new FormBody.Builder().add("a","1").add("b","2").build();

                //创建请求对象,url参数为域名
                //post() 默认就是get请求,所以要指明是post请求。post参数:必须传入一个请求体new RequestBody()
                //build返回Request实例对象
                Request request=new Request.Builder().url("https://www.httpbin.org/post").post(formBody).build();

                //得到一个准备好请求的Call对象
                Call call=okHttpClient.newCall(request);

                //enqueue异步请求,传入回调对象
                //Callback回调对象
                call.enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {

                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        Log.i("TAG", "post异步请求 "+response.body().string());
                    }
                });
            }
        });
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TL。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值