
OkHttp常见场景及用法
发布日期:2021-05-27 02:42:02
浏览次数:3
分类:技术文章
本文共 3903 字,大约阅读时间需要 13 分钟。
前言:
OkHttp在Android上为我们提供了第三方库里网络请求的最佳使用方式。下面简略看其使用方法。
依赖:implementation 'com.squareup.okhttp3:okhttp:3.10.0'
注意事项:
- 使用前要先在AndroidManifest.xml注册网络请求权限
- 所有OkHttp请求实例均需要在子线程内进行,这意味着需要我们手动开启一个线程
- 所有OkHttp请求实例的IO输出均有异常风险,这意味着我们必须使用
try catch
来捕捉异常(请求实例放入try
内) response.body().string()
只可被使用一次(不可多次使用,否则异常)- 如果想要在请求数据获得后进行更新UI,最简便的方法是调用
runOnUiThread()
回到主线程(使用Handler
也可以)
Get请求:
说明:
首先我们先构建出一个OkHttpClient()
对象实例;然后通过链式调用创建一个Request
对象,URL为http://www.fynu.edu.cn/,后接两个参数,其键与值分别为"account"、“password”,“admin”、“467”;之后调用OkHttpClient()
对象实例的newCall()
方法创建Call()
方法,并调用其execute()
来返回其从服务器获得的数据。 OkHttpClient client = new OkHttpClient();Request request = new Request.Builder() .url("https://www.fynu.edu.cn/?account=amdmin&password=467") .build();Response response = client.newCall(request).execute();String data = response.body().string();
Post请求:
说明:
Post请求与Get请求多了表单这个概念,其实就是特殊的键值对。需要说明的是,这个表单内的数据近似无限多(字符占用很少,但有的浏览器限制为几兆比以内)。下面的add()
方法内第一个就是键,第二个就是值,其余均类似,不再赘述。 OkHttpClient client = new OkHttpClient();RequestBody requestBody = new FormBody.Builder() .add("id","2012001") .add("paswword","123456789") .build();Request request = new Request.Builder() .url("https://www.test.com/NoneTest_war_exploded/test") .post(requestBody) .build();Response response = client.newCall(request).execute();String data = response.body().string();
回调方法:
Post与Get均有两个回调方法,一个是请求成功的方法onResponse()
,另一个是请求失败的方法onFailure()
。下面以Post请求为例:
OkHttpClient client = new OkHttpClient();RequestBody requestBody = new FormBody.Builder() .add("id","2012001") .build();Request request = new Request.Builder() .url("http://192.168.137.1:8080/NoneTest_war_exploded/test") .post(requestBody) .build();Call call = client.newCall(request);call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); } @Override public void onResponse(Call call, Response response) throws IOException { String data = response.body().string(); }});
完整示例:
private void requestTest(){ new Thread(new Runnable() { @Override public void run() { try{ OkHttpClient client = new OkHttpClient(); RequestBody requestBody = new FormBody.Builder() .add("id","2012001") .build(); Request request = new Request.Builder() .url("http://192.168.137.1:8080/NoneTest_war_exploded/test") .post(requestBody) .build(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); } @Override public void onResponse(Call call, Response response) throws IOException { final String data = response.body().string(); runOnUiThread(new Runnable() { @Override public void run() { // According to data of reponse to update UI thread. textView.setText(data); } }); } }); } catch (Exception e){ e.printStackTrace(); } } }).start(); }
转载地址:https://blog.csdn.net/kicinio/article/details/110007498 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2023年11月03日 11时53分30秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
yuemiao-开发(一)
2019-03-25
fiddler4实现手机抓包的流程
2019-03-25
工具(tcping)---查看指定IP的端口是否打开
2019-03-25
工具(cmder)---轻量级免费命令行工具
2019-03-25
在Linux/Ubuntu中,创建Clion, Pycharm,IDEA的桌面快捷方式
2019-03-25
c语言多线程返回值以及内存回收的问题
2019-03-25
VM:VMware 创建windows10 虚拟机
2019-03-25
win10磁盘未分配区被分隔,无法拓展卷的问题
2019-03-25
Keepass密码管理,windows+安卓+Onedrive实现云同步
2019-03-25
Excel 柱形图修改图例大小,增加图例宽度
2019-03-25
VS2015环境中,Vb.Net进行sql数据库操作时遇到的中文问号的问题
2019-03-25
vs2013 +qt出现“无法找到源文件ui.xxx.h”解决办法
2019-03-25
Qt+opencv+EasyPR(车牌识别系统,从配置环境到成功运行)
2019-03-25
Qt opencv 程序异常结束,crashed
2019-03-25
Win10如何修改 开始菜单,并添加 磁贴
2019-03-25
《华科计算机保研机试疑问解答》(不定期更新)
2019-03-25
web开发中谷歌/火狐浏览器无法及时更新html/js修改内容?
2019-03-25
【练习】腾讯2017秋招笔试编程题——2.游戏任务标记
2019-03-25
pip安装方法
2019-03-25