IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> OkHttp--Get和post的同步请求、异步请求 -> 正文阅读

[网络协议]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());
                    }
                });
            }
        });
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:49:22  更:2022-03-03 16:50:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:20:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码