欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Okhttp使用

程序员文章站 2022-05-29 12:26:51
okhttp是一个第三方类库,用于android中请求网络。是一个开源项目,是安卓端最火热的轻量级框架,于替代HttpUrlConnection和Apache HttpClient(android API23 里已移除HttpClient)。 ......

okhttp使用


 

2019-03-31-20:48:45          云林原创


 

一、okhttp介绍:

1、okhttp开源库出自square公司,是一个优秀的网络请求框架,它基于httpurlconnectiond的封装,支持get/post请求,文件的上传和下载,图片的加载,让写法更加简单,可以处理更加复杂的网络请求。

2、okhttp可是实现的功能

  • get/post同步、异步请求
  • 文件的上传,下载
  • 图片的加载
  • 请求回调等

3、okhttp的特点

  • 响应缓存
  • 支持gzip压缩
  • 支持websocket
  • 多ip切换
  • 减少连接池请求延时

二、okhttp请求准备

##1、okhttp的依赖的引入

module的gradle中添加

--------------------------------------------------------

compile 'com.squareup.okhttp3:okhttp:3.5.0'

--------------------------------------------------------

然后同步一下项目即可。

okhttp有自己的官网,可在官网上查询最新依赖,官网网址:okhttp官网

##2、okhttp中添加权限

    <uses-permission android:name="android.permission.internet"></uses-permission>
    <uses-permission android:name="android.permission.read_external_storage"></uses-permission>
    <uses-permission android:name="android.permission.write_external_storage"></uses-permission>
    <uses-permission android:name="android.permission.access_network_state"></uses-permission>

三、okhttp进行get请求

get 请求只需要四步即可完成:

1 . 获取okhttpclient对象:

okhttpclient client = new okhttpclient();

2 . 构造request对象:

request request = new request.builder()
                .get()
                .url("https:www.baidu.com")
                .build();

3 . 将request封装为call:

call call = client.newcall(request);

4 . 根据需要调用同步或者异步请求方法  

 同步调用
//同步调用,返回response,
response response = call.execute();

  异步调用

//异步调用,并设置回调函数
call.enqueue(new callback() {
      //请求失败调用
    @override
    public void onfailure(call call, ioexception e) {
        toast.maketext(okhttpactivitydemo.this, "get failed", toast.length_short).show();
    }
    //请求成功调用
    @override
    public void onresponse(call call, final response response) throws ioexception {
        final string res = response.body().string();
        runonuithread(new runnable() {
            @override
            public void run() {
                toast.maketext(okhttpactivitydemo.this, "get success", toast.length_short).show();
          } 
     });
    } 
});

注意:

在异步调用时,回调函数是在子线程,不能在子线程更新ui,需要借助于 runonuithread() 方法或者 handler 来处理

四、okhttp进行post请求提交键值对:

  post 请求和进行 get 请求很类似。

1 、获取okhttpclient对象:

 okhttpclient client = new okhttpclient();

2、使用formbody构建包含键值对类型参数的请求体:

formbody formbody = new formbody.builder()
                .add("username", "admin")
                .add("password", "123")
                .build();

3、 构建request,将formbody作为post方法的参数传入

request request = new request.builder()
                .url("http://www.jianshu.com/")
                .post(formbody)
                .build();

4、将request封装为call

call call = client.newcall(request);

5 . 调用请求,重写回调方法

call.enqueue(new callback() {
    @override
    public void onfailure(call call, ioexception e) {
        toast.maketext(okhttpactivitydemo.this, "post failed", toast.length_short).show();
    }

    @override
    public void onresponse(call call, response response) throws ioexception {
        final string res = response.body().string();
        runonuithread(new runnable() {
            @override
            public void run() {
                 toast.maketext(okhttpactivitydemo.this, "post success", toast.length_short).show();
            }
        });
    }
});

五、后记

以上就是 okhttp 常用get和set请求的总结,当热还有文件的上传和下载等。