Tip---OkHttp使用

95 阅读2分钟
  • OkHttp由Square公司开发,其不仅在接口封装上面做的简单易用, 就连在底层实现上也是自成一派, 比起原生的HttpURLConnection,可以说是有过之而无不及, 现在已经成了广大Android开发者的首选网络通信库。

  • OkHttp项目主页地址:github.com/square/okht…

  • 使用之前,需添加OkHttp库依赖, 打开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.CallbackonResponse()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){
        //在这里对异常情况进行处理
}
});