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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:基于Swing与MySQL之货物仓库管理系统(可为Java大作业、甚至毕业设计)
下一篇:Swift 基本数据类型之间互相转换

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2023年11月03日 11时53分30秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章