这个是我封装的最简单的版本。不适合使用到真实项目中,其实使用了一般也没问题,但是不建议,这个真实项目最好更灵活的重新封装一下
下面直接给使用方法吧,有些东西,如果初学者会用就行了。
过阵子会教你一步一步封装这个方法,保证看的懂能理解。

先看如何使用吧

        String url = "http://www.baidu.com";        OkHttpUtils.getInstance().startPost(url, null,new OnNetResultListener() {            @Override            public void onSuccessListener(String successResult) {                LogUtil.i("successResult : " + successResult);            }            @Override            public void onFailureListener(String errorResult) {                LogUtil.i("errorResult : " + errorResult);            }        });

上面的代码是调用一个请求的过程。这个是通过post请求的,需要一个url,我这里不需要参数直接用了null。参数用的是map类型存储的,new 一个map 传进去就行的。
最后是一个回调函数,数据返回了 会在回调函数里面出现,一般我们用json数据,这时候可以解析,然后使用了。整个网络请求还是非常简单的。
这里需要特别注意一点就是,运行这个需要网络权限,如何写在Glide那篇文章里面有 非常简单

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

下面是引用OkHttp的代码,这里封装了3.8.其实每个版本封装都差不多。先用这个就好。看懂这个新版本也会封装了

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

源码

package com.iscoding.demo.zhihu.http;import android.os.Handler;import java.io.IOException;import java.util.Iterator;import java.util.Map;import java.util.Set;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.RequestBody;import okhttp3.Response;/** * 类功能:OkHttp的简单封装 ,方便使用 * 公司:IsCoding工作室 * 作者:IsCoding * 邮箱:[email protected]   QQ:1400100300 */public class OkHttpUtils {    public enum REQUEST_TYPE {        POST, GET    }    private Handler handler;    private OkHttpClient client;    private static OkHttpUtils INSTANCE;    private OkHttpUtils() {        handler = new Handler();        client = new OkHttpClient.Builder()                // 等线程池, 缓存, 文件下载讲完之后再来修改添加//                .retryOnConnectionFailure()//                .cache()//                .readTimeout()                .build();    }    public static OkHttpUtils getInstance() {        if (INSTANCE == null) {            INSTANCE = new OkHttpUtils();        }        return INSTANCE;    }    private void sendRequest(REQUEST_TYPE request_type, final String url, final Map header, final Map body, final OnNetResultListener listener) {        // 构建一个Request  Builder        Request.Builder requestBuilder = new Request.Builder();        //设置请求的url        requestBuilder.url(url);        //设置请求头        setHeader(requestBuilder, header);        if (request_type == REQUEST_TYPE.POST) {            // 构建请求体            RequestBody requesBody = getRequestBody(body);            if(requesBody == null){                // 构建一个Request                Request request = requestBuilder.build();                //发送一个请求   并处理回调                createCall(request, listener);            }else{                // 构建一个Request                Request request = requestBuilder.post(requesBody).build();                //发送一个请求   并处理回调                createCall(request, listener);            }        } else if (request_type == REQUEST_TYPE.GET) {            // 构建一个Request            Request request = requestBuilder.get().build();            //发送一个请求   并处理回调            createCall(request, listener);        }    }    private RequestBody getRequestBody(final Map body) {        if(body==null || body.size()<=0){            return null;        }        FormBody.Builder buildder = new FormBody.Builder();        Set set = body.keySet();        Iterator iterator = set.iterator();        while (iterator.hasNext()) {            String key = (String) iterator.next();            String value = body.get(key);            buildder.add(key, value);        }        RequestBody requesBody = buildder.build();        return requesBody;    }    private void setHeader(Request.Builder requestBuilder, final Map header) {        if(header==null || header.size()<=0){            return;        }        Set headSet = header.keySet();        Iterator headI = headSet.iterator();        while (headI.hasNext()) {            String k = (String) headI.next();            String v = header.get(k);            requestBuilder.addHeader(k, v);        }    }    //请求并处理回调    private void createCall(Request request, final OnNetResultListener listener) {        client.newCall(request).enqueue(new Callback() {            @Override            public void onFailure(Call call, final IOException e) {                final String errMsg = e.getMessage();                // 发回主线程                handler.post(new Runnable() {                    @Override                    public void run() {                        listener.onFailureListener(errMsg);                    }                });            }            @Override            public void onResponse(Call call, final Response response) throws IOException {                final String str = response.body().string();                handler.post(new Runnable() {                    @Override                    public void run() {                        listener.onSuccessListener(str);                    }                });            }        });    }    // *********************提供给外部的操作方法*************************    // 封装: 对外提供使用方式, 具体的实现细节封装起来    public void startGet(String url, OnNetResultListener listener) {//        _startGet(url, listener);        sendRequest(REQUEST_TYPE.GET, url, null, null, listener);    }    public void startHeader(String url, Map headers, OnNetResultListener listener) {        sendRequest(REQUEST_TYPE.GET, url, headers, null, listener);    }    public void startPost(String url, Map body, OnNetResultListener listener) {        sendRequest(REQUEST_TYPE.POST, url, null, body, listener);    }    public void startPost(String url, Map body, Map headers, OnNetResultListener listener) {        sendRequest(REQUEST_TYPE.POST, url, headers, body, listener);    }}

下面是回调函数

package com.iscoding.demo.zhihu.http;/** * Created by ic on 2018/1/16. */public interface OnNetResultListener {    public void onSuccessListener(String successResult);    public void onFailureListener(String errorResult);}

更多相关文章

  1. Android(安卓)8.0 行为变更
  2. Android(安卓)4.0-Launcher-FolderEdit-onKeyPreIme
  3. [置顶] Intent filter 关于Action、Category属性详解---附带实例
  4. Android(安卓)Kotlin 开发踩坑之旅
  5. Android(安卓)翻页效果 电子书
  6. Android之全面解析OkHttp源码
  7. Android(安卓)5.0之后隐式声明Intent 启动Service引发的问题
  8. Android应用程序从源码到安装包的整个过程
  9. 第3.3.4节 创建高级图形之RenderScript(二)

随机推荐

  1. android 动态调试 遇到的问题
  2. Android学习资料汇总
  3. Android(安卓)Studio JNI
  4. android使用html标签
  5. Android调用微信登陆、分享、支付(第一版)
  6. android 如何做到完全退出应用程序
  7. Android中Window添加View的底层原理
  8. Android控件的一般属性
  9. 它们的定义android滑动菜单
  10. Android(安卓)4.0 新增的显示数据集的桌