Tip | OkHttp使用

简介: OkHttp简介和使用
  • OkHttp由Square公司开发,其不仅在接口封装上面做的简单易用,

就连在底层实现上也是自成一派,
比起原生的HttpURLConnection,可以说是有过之而无不及,
现在已经成了广大Android开发者的首选网络通信库。

打开app/buid.gradle,在dependencies闭包中添加如下内容:

    implementation("com.squareup.okhttp3:okhttp:3.14.0")

添加此依赖,会自动下载两个库:OkHttp库、Okio库(是前者的通信基础)。

  • 注意,添加前最好是访问一下OkHttp项目主页查看当前最新的版本是多少,再在gradle处添加依赖;
下面是OkHttp具体用法
  • 首先,需要创建OkHttpClient实例,如下:
OkHttpClient client = new OkHttpClient();
  • 接下来,如想发起一条HTTP请求,需创建Request对象
Request request = new Request.Builder().build();
  • 当然上述代码只是创建一个空的Request对象,

需要在build()方法之前可连缀很多其他方法丰富此Request对象。

Request request = new Request.Builder()
.url("https://www.baidu.com")
.build();
  • 之后调用OkHttpCilent的newCall()方法创建一个Call对象

并调用它的execute()方法发送请求
获取服务器返回的数据:

Response response = client.newCall(request).execute();
  • request存请求;
  • newCall接收request
  • execute执行request
  • Response对象接收服务器返回的数据;
  • 下面得到返回的具体内容
String responseData = response.body().string();



如果发起一条POST请求,会比GET复杂些;

  • 需先构建RequestBody对象存放待提交的参数
RequestBody requestBody = new FormBody.Builder()
.add("username", "admin")
.add("password", "123456")
.build();
  • 然后在Request.Builder中以RequestBody对象为传入的参数调用post()方法,:
Request request = new Request.Builder()
.url("http://www.baidu.com")
.post(requestBody)
.build();
  • 接下来的操作就和GET请求一样了,

调用execute()方法发送请求并获取服务器返回的数据即可。


另外注意OkHttp可以把最后执行的execute()方法换成enqueue(callback)
即调用enqueue()并接收一个框架提供的okhttp3.Callback接口;

public static void sendOkHttpRequest(String address, okhttp3.Callback callback){
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder().url(address).build();
                    client.newCall(request).enqueue(callback);//enqueue方法内部已经开好了子线程
        }

使用时,复写okhttp3.Callback
onResponse()onFailure()两个方法,
处理成功请求请求失败的情况;

sendOkHttpRequest("https://www.baidu.com", new okhttp3.Callback(){
    @Override
    public void onResponse(Call call, Response response) throws IOException{
        //得到服务器返回的具体数据
        String reponseData = reponse.body().string();
}
    @Override
    public void onFailure(Call call, IOException e){
        //在这里对异常情况进行处理
}
});
相关文章
|
6月前
|
JSON 前端开发 Java
前端请求SpringBoot接口出现Required request body is missing
前端请求SpringBoot接口出现Required request body is missing
314 2
|
4月前
|
消息中间件 调度 Android开发
Android经典面试题之View的post方法和Handler的post方法有什么区别?
本文对比了Android开发中`View.post`与`Handler.post`的使用。`View.post`将任务加入视图关联的消息队列,在视图布局后执行,适合视图操作。`Handler.post`更通用,可调度至特定Handler的线程,不仅限于视图任务。选择方法取决于具体需求和上下文。
53 0
|
6月前
|
XML JSON Java
Android App网络通信中通过okhttp调用HTTP接口讲解及实战(包括GET、表单格式POST、JSON格式POST 附源码)
Android App网络通信中通过okhttp调用HTTP接口讲解及实战(包括GET、表单格式POST、JSON格式POST 附源码)
871 0
|
缓存 JSON 数据格式
OkHttp3源码详解(一) Request类
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680每一次网络请求都是一个Request,Request是对url,method,header,body的封装,也是对Http协议中请求行,请求头,实体内容的封装 p.
|
JSON 前端开发 Java
【Json与Ajax交互报错解决】No converter found for return value of type: class com.github.pagehelper.PageInfo
【Json与Ajax交互报错解决】No converter found for return value of type: class com.github.pagehelper.PageInfo
331 0
【Json与Ajax交互报错解决】No converter found for return value of type: class com.github.pagehelper.PageInfo
Flutter之导url_launcher包提示 A dependency may only have one source.
Flutter之导url_launcher包提示 A dependency may only have one source.
143 0
Flutter之导url_launcher包提示 A dependency may only have one source.
Okhttp3源码解析(2)-Request分析
前言 前面我们讲了Okhttp的基本用法Okhttp3源码解析(1)-OkHttpClient分析 今天主要分析下Request源码! Request初始化 当我们构建完OkHttpClient对象,需要构造Request对象,构造方式如下: 1.
989 0
|
JSON Android开发 数据格式
Okhttp3-基本用法
前言 Okhttp官网Okhttp-Github 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 查看并依赖最新的版本。
3145 0
|
Android开发
一个关于R包报错的tip
我们做Android开发时,在项目迁移的时候总会遇到各种R包报错的情况,这个时候一定要淡定一点,好好去思考和尝试着解决问题,下面分享一下一个最近遇到并最终得到解决的R包报错的情况。
800 0
|
Java
okhttp 使用 post
  java  okhttp maven pom   com.squareup.okhttp3 okhttp 3.2.0 com.squareup.okio okio 1.
1254 0