文档章节

okhttp的基础使用

人猿居士
 人猿居士
发布于 2017/08/24 13:34
字数 656
阅读 21
收藏 0

#okhttp的基础使用

本文基于Android Studio进行讲解okhttp网络框架的基础使用

##使用前的准备工作

###1.在gradle中进行配置 compile 'com.squareup.okhttp3:okhttp:3.4.1' ###2.清单文件中添加网络权限 <uses-permission android:name="android.permission.INTERNET"/> 如果需要用到文件上传功能,添加:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

##执行流程

以下是发送一个get请求的步骤,首先构造一个Request对象,参数最起码有个url,当然你可以通过Request.Builder设置更多的参数比如:header、method等。

然后通过request的对象去构造得到一个Call对象,类似于将你的请求封装成了任务,既然是任务,就会有execute()和cancel()等方法。

最后,我们希望以异步的方式去执行请求,所以我们调用的是call.enqueue,将call加入调度队列,然后等待任务执行完成,我们在Callback中即可得到结果。

##方式一(get请求)

  /**
 * get请求
 * [@param](https://my.oschina.net/u/2303379) url
 * [@param](https://my.oschina.net/u/2303379) callBack
 */
public static void get(String url , final RequestCallBack callBack){
    OkHttpClient mHttpClient = new OkHttpClient();
    Request request = new Request.Builder().get().url(url).build();
    Call call = mHttpClient.newCall(request);
    call.enqueue(new Callback() {
        [@Override](https://my.oschina.net/u/1162528)
        public void onFailure(Call call, IOException e) {
            callBack.onFailure(call , e);
        }

        [@Override](https://my.oschina.net/u/1162528)
        public void onResponse(Call call, Response response) throws IOException {
            callBack.onResponse(call , response.body().toString());
        }
    });
}

##方式二(post请求)

 /**
 * post请求
 * [@param](https://my.oschina.net/u/2303379) url
 * @param params
 * @param callBack
 */
public static void post(String url , Map<String , String> params , final RequestCallBack callBack){
    OkHttpClient client = new OkHttpClient();
    FormBody.Builder builder = new FormBody.Builder();
    for (String key : params.keySet()){
        builder.add(key , params.get(key));
    }
    RequestBody formBody = builder.build();
    Request request = new Request.Builder()
            .url(url)
            .post(formBody)
            .build();

    Call call = client.newCall(request);
    call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            callBack.onFailure(call , e);
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            callBack.onResponse(call , response.body().toString());
        }

    });
}

##方式三(异步上传文件)

/**
 * 
 * @param url
 * @param file
 * @param callBack
 */
public static void postFile(String url , File file , final RequestCallBack callBack) {
    OkHttpClient mOkHttpClient = new OkHttpClient();
    Request request = new Request.Builder()
            .url(url)
            .post(RequestBody.create(MediaType.parse("MEDIA_TYPE_MARKDOWN") , file))
            .build();

    mOkHttpClient.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            callBack.onFailure(call , e);
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            callBack.onResponse(call , response.body().toString());
        }
    });
}

结语:okhttp的回调结果是在子线程中的,如果想要在回调中修改界面控件,则需要先回调到主线程中进行修改,否则会出问题,下篇将介绍一下用okhttp框架来访问https协议的接口用法

【总监】十二春秋之,3483099@qq.com; 【Master】zelo,616701261@qq.com;【运营】狼行天下,897221533@qq.com; 【产品设计】流浪猫,364994559@qq.com;【体验设计】兜兜,2435632247@qq.com; 【iOS】淘码小工,492395860@qq.com;iMcG33K,imcg33k@gmail.com;【Android】人猿居士,1059604515@qq.com;思路的顿悟,1217022114@qq.com; 【java】首席工程师MR_W,feixue300@qq.com;【测试】土镜问道,847071279@qq.com; 【数据】喜乐多,42151960@qq.com;【安全】保密,你懂的。

© 著作权归作者所有

人猿居士
粉丝 0
博文 24
码字总数 10939
作品 0
昌平
私信 提问
OkHttp 3.x 源码解析之Interceptor 拦截器

Tamic / 开发者技术前线 OkHttp拦截器原理解析 在进行下文前,先说明一点,本文面向的是对Okhttp有一定基础的读者,Okhttp基础使用请阅读我的其他OKhttp+Retrofit+RxJava基础用法的文章: OK...

2018/10/28
0
0
Android Okhttp缓存:精细化每一个Request的CacheControl缓存控制策略(二)

Android Okhttp缓存:精细化每一个Request的CacheControl缓存控制策略(二) 之前我写的附录文章1,只是简单的使用缺省的方法实现Okhttp的缓存。现在使用CacheControl,精细化到每一个Reque...

开开心心过
2017/10/24
0
0
Android 中常用的几种网络框架

在日常的开发中,大多数应用程序基本都需要连接网络,发送一些数据给服务端,然后在从服务端获取一些数据。通常在android中进行网络连接一般使用Scoket和HTTP,HTTP请求方式教Scoket多得多。...

oschina
2016/03/10
6.5K
12
Xutils, OKhttp, Volley, Retrofit对比

Xutils这个框架非常全面,可以进行网络请求,可以进行图片加载处理,可以数据储存,还可以对view进行注解,使用这个框架非常方便,但是缺点也是非常明显的,使用这个项目,会导致项目对这个框...

安卓笔记侠
2018/08/17
0
0
spring传统xml配置okhttp3

问题 后端服务需要使用http客户端请求其他服务支持,项目中需要将HttpClient换成OKhttp,为啥要换OKhttp?这里不讨论这两者之间的优缺点。这篇文章主要关注与Spring传统xml配置方式集成Okhtt...

亚林瓜子
2018/04/19