Okhttp3-基本用法
前言
android网络框架之OKhttp一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso)
用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除HttpClient)
官网的解释如下:
基本用法
1.集成
1.1.依赖
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
可以去Okhttp-Github 查看并依赖最新的版本。
1.2权限
添加网络权限
<uses-permission android:name="android.permission.INTERNET" />
2.使用
2.1 同步GET请求
- 构建OkHttpClient对象
- 构建Request对象
- 构建Call对象并通过
execute()
方法来执行同步Get请求
//同步请求 OkHttpClient okHttpClient=new OkHttpClient(); final Request request=new Request.Builder() .url("https://www.wanandroid.com/navi/json") .get() .build(); final Call call = okHttpClient.newCall(request); try { Response response = call.execute(); Log.e("同步结果---- ",response.body().string()+""); } catch (IOException e) { e.printStackTrace(); }
运行后发现报错:
android.os.NetworkOnMainThreadException
在Android4.0以后,会发现,只要是写在主线程(就是Activity)中的HTTP请求,运行时都会报错,这是因为Android在4.0以后为了防止应用的ANR(Aplication Not Response)异常。解决方法就是在子线程中运行:
//同步请求 OkHttpClient okHttpClient=new OkHttpClient(); final Request request=new Request.Builder() .url("https://www.wanandroid.com/navi/json") .get() .build(); final Call call = okHttpClient.newCall(request); new Thread(new Runnable() { @Override public void run() { try { Response response = call.execute(); Log.e("同步结果---- ",response.body().string()+""); } catch (IOException e) { e.printStackTrace(); } } }).start();
2.2 异步GET请求
//异步请求 OkHttpClient okHttpClient=new OkHttpClient(); final Request request=new Request.Builder() .url("https://www.wanandroid.com/navi/json") .get() .build(); final Call call = okHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.d("okhttp_error",e.getMessage()); } @Override public void onResponse(Call call, Response response) throws IOException { Gson gson=new Gson(); Log.d("okhttp_success",response.body().string()); } });
2.3 POST请求
POST请求支持提交文件,流,string,表单等等 。这里拿POST表单请求作为请求示例:
OkHttpClient okHttpClient = new OkHttpClient(); RequestBody requestBody = new FormBody.Builder() .add("username", "qinzishuai") .add("password", "111111") .build(); Request request = new Request.Builder() .url("https://www.wanandroid.com/user/login") .post(requestBody) .build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.d("okhttp", "onFailure: " + e.getMessage()); } @Override public void onResponse(Call call, Response response) throws IOException { Log.d("okhttp", "onResponse: " + response.body().string()); } });
大家可以关注我的微信公众号:「秦子帅」一个有质量、有态度的公众号!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
在macOS上安装配置golang开发环境
本文主要介绍如何在macOS上安装配置golang开发环境。 一、安装 Homebrew 打开终端,输入以下命令安装 Homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 二、安装配置 golang 1. 通过brew方式安装golang 在终端中输入以下命令安装golang brew install go 或者 brew install golang 2. 通过下载安装包,安装golang 到官方网站 Downloads 下载golang软件安装包。 或者直接点击下面的链接,下载安装。 go1.12.9.darwin-amd64.pkg (121MB) 3. 配置goproxy代理 由于众所周知的原因,下载golang相关模块非常困难。 这里介绍一种相对靠谱的解决方案:go mod + goproxy 通过编辑器打开 .bashrc 或者 .zshrc,将以下配置贴到文件最后,并保存。 # Enable the go mod...
- 下一篇
为什么说java是只有值传递?
为什么说java是只有值传递?如果你学的第一门程序语言是java可能对这个传递方式没有那么敏感,如果学了c或c++,然后再学java,那么可能对这个问题会感到困惑。 1.值传递与引用传递的概念在将传递方式之前先理解一下形参与实参。 形式参数:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。 实际参数:在调用有参函数时,主调函数和被调函数之间有数据传递关系。在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”。 可以这么理解:形参是实参的抽象,实参是调用时的参数,形参是定义函数的参数 值传递:方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数,后面方法中的操作都是对形参这个值的修改,不影响实际参数的值。 引用传递:是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。 划重点:值传递和引用传递的主要区别 值传递 引用传递 创建副本,在函数体中不能改变原来的值 不创建副本,在在函数体中不能改变原来的值 创建副本的含...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7设置SWAP分区,小内存服务器的救世主