国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

OkHttp的封裝及使用方法

2019-11-09 19:04:54
字體:
來源:轉載
供稿:網友
    這里主要是使用OkHttp封裝  直接將接口和參數還有泛型以及請求類型直接傳入就可以進行解析獲取到類的實例??!package com.bwie.qieziyisheng.utils;import android.os.Handler;import android.os.Looper;import com.google.gson.Gson;import com.squareup.okhttp.Call;import com.squareup.okhttp.Callback;import com.squareup.okhttp.FormEncodingBuilder;import com.squareup.okhttp.OkHttpClient;import com.squareup.okhttp.Request;import com.squareup.okhttp.Response;import java.io.IOException;import java.util.Iterator;import java.util.Map;/** * Created by lq on 2017/1/9. * 作者:栗啟 * 作用: */public class OkHttpUtils {    //聲明    PRivate static volatile OkHttpUtils okHttpUtils;    Handler handler;    private final Gson gson;    //聲明接口    MCallBack mCallBack;    // 私有構造方法    private OkHttpUtils() {        handler = new Handler(Looper.getMainLooper());        gson = new Gson();    }    //設置方法    public static OkHttpUtils getOkHttpUtils() {        if (null == okHttpUtils) {            synchronized (OkHttpUtils.class) {                if (null == okHttpUtils) {                    okHttpUtils = new OkHttpUtils();                }            }        }        return okHttpUtils;    }    //請求網絡    public <T> void getMotheds(String url, final Class<T> cls) {        //得到Client對象        OkHttpClient okHttpClient = new OkHttpClient();        //創建Request        Request request = new Request.Builder().url(url).build();        //new Call        Call call = okHttpClient.newCall(request);        //接口回調        call.enqueue(new Callback() {            @Override            public void onFailure(Request request, IOException e) {                if (mCallBack != null) {                    mCallBack.onFailure(request, e);                }            }            @Override            public void onResponse(Response response) throws IOException {                //設置解析                String json = response.body().string();                getJson(json, cls);            }        });    }    //設置拼接字符串的方法    public <T> void get(String url, Map<String, String> map, Class<T> cls) {        int i = 0;        Iterator<String> iterator = map.keySet().iterator();        while (iterator.hasNext()) {            String key = iterator.next();            //獲取Value            String value = map.get(key);            //拼接字符串            if (i == 0) {                url += key + "=" + value;                i++;            } else {                url += "&" + key + "=" + value;            }        }        //解析        getMotheds(url, cls);    }    //解析    public <T> void getJson(String json, Class<T> cls) {        T t = gson.fromJson(json, cls);        mainThread(t);    }    //設置請求Post請求    public <T> void post(String url, Map<String,String> map, final Class<T> cls){        //得到Client對象        OkHttpClient okHttpClient=new OkHttpClient();        //得到Body        FormEncodingBuilder builder=new FormEncodingBuilder();        //遍歷        Iterator<String> iterator=map.keySet().iterator();        while(iterator.hasNext()){            String key=iterator.next();            //獲取Value            String value=map.get(key);            //加入到Builder里面            builder.add(key,value);        }        //得到Result        Request request=new Request.Builder().url(url).post(builder.build()).build();        //獲取call        Call call=okHttpClient.newCall(request);        call.enqueue(new Callback() {            @Override            public void onFailure(Request request, IOException e) {                if(mCallBack!=null){                    mCallBack.onFailure(request,e);                }            }            @Override            public void onResponse(Response response) throws IOException {                //獲取Json                String json=response.body().string();                getJson(json,cls);            }        });    }    //將消息發送到主線程    public void mainThread(final Object result) {        handler.post(new Runnable() {            @Override            public void run() {                //接口回調                mCallBack.onResponse(result);            }        });    }    //設置接口    public interface MCallBack {        void onResponse(Object object);        void onFailure(Request request, IOException e);    }    //設置接口    public void setmCallBack(MCallBack callBack) {        this.mCallBack = callBack;    }    //請求網絡    public <T> void initNetData(String url,Map<String,String> map,Class<T> cls,Methods methods){        switch (methods){            case GET:               get(url,map,cls);                break;            case  POST:                post(url,map,cls);                break;        }    }    //生成枚舉    public enum Methods {        GET,POST    }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 伊宁县| 葫芦岛市| 南平市| 无棣县| 抚顺市| 察隅县| 巍山| 阿拉尔市| 民勤县| 永顺县| 青阳县| 军事| 龙门县| 南宫市| 枣庄市| 城口县| 凌云县| 修水县| 梅州市| 湖北省| 高淳县| 南昌县| 彭泽县| 高邮市| 额济纳旗| 马龙县| 昭通市| 东平县| 定襄县| 弥渡县| 罗山县| 佛教| 汝南县| 元朗区| 汤原县| 桐梓县| 奇台县| 台北市| 平武县| 鄂托克旗| 商城县|