mvp封装的OKhttp

来源:互联网 发布:什么是软件危机 编辑:程序博客网 时间:2024/05/21 19:39
import android.os.Handler;import android.text.TextUtils;import android.util.Log;import java.io.IOException;import java.util.Map;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;public class HttpUtils {    private static final String TAG = "HttpUtils";    private static volatile HttpUtils instance;    private static Handler handler = new Handler();    private HttpUtils() {    }    public static HttpUtils getInstance() {        if (null == instance) {            synchronized (HttpUtils.class) {                if (instance == null) {                    instance = new HttpUtils();                }            }        }        return instance;    }    /**     * Get请求     *     * @param url     * @param map     * @param callBack     * @param cls     * @param tag     */    public void get(String url, Map<String, String> map, final CallBack callBack,                    final Class cls, final String tag) {        // http://www.baoidu.com/login?mobile=11111&password=11111&age=1&name=zw        // 1.http://www.baoidu.com/login                --------? key=value&key=value        // 2.http://www.baoidu.com/login?               --------- key=value&key=value        // 3.http://www.baoidu.com/login?mobile=11111   -----&key=value&key=value        if (TextUtils.isEmpty(url)) {            return;        }        StringBuffer sb = new StringBuffer();        sb.append(url);        // 如果包含?说明是2.3类型        if (url.contains("?")) {            // 如果包含?并且?是最后一位,对应是2类型            if (url.indexOf("?") == url.length() - 1) {            } else {                // 如果包含?并且?不是最后一位,对应是3类型                sb.append("&");            }        } else {            // 不包含?,对应的1类型            sb.append("?");        }        // 遍历map集合进行拼接,拼接的形式是 key=value&        for (Map.Entry<String, String> entry : map.entrySet()) {            sb.append(entry.getKey())                    .append("=")                    .append(entry.getValue())                    .append("&");        }        // 如果存在&号,把最后一个&去掉        if (sb.indexOf("&") != -1) {            sb.deleteCharAt(sb.lastIndexOf("&"));        }        Log.i(TAG, "get url: " + sb);        OkHttpClient client = new OkHttpClient();        final Request request = new Request.Builder()                .get()                .url(sb.toString())                .build();        Call call = client.newCall(request);        call.enqueue(new Callback() {            @Override            public void onFailure(Call call, final IOException e) {                handler.post(new Runnable() {                    @Override                    public void run() {                        // 通过自己传进来的回调接口对象回传回去                        callBack.onFailed(tag, e);                    }                });            }            @Override            public void onResponse(Call call, Response response) throws IOException {                final String result = response.body().string();                // 请求成功之后做解析,通过自己的回调接口将数据返回回去                handler.post(new Runnable() {                    @Override                    public void run() {                        Object o;                        if (TextUtils.isEmpty(result)) {                            o = null;                        } else {                            o = GsonUtils.getInstance().fromJson(result, cls);                        }                        callBack.onSuccess(tag, o);                    }                });            }        });    }    /**     * 封装的post请求     *     * @param url     * @param map     * @param callback     * @param cls     */    public void post(final String url, Map<String, String> map, final CallBack callback , final Class cls,final String tag) {        OkHttpClient client = new OkHttpClient();        FormBody.Builder builder = new FormBody.Builder();        for (Map.Entry<String, String> entry : map.entrySet()) {            builder.add(entry.getKey(), entry.getValue());        }        FormBody body = builder.build();        final Request request = new Request.Builder()                .url(url)                .post(body)                .build();        Call call = client.newCall(request);        call.enqueue(new okhttp3.Callback() {            @Override            public void onFailure(Call call, final IOException e) {                Log.e(TAG, "onFailure: " + e.getCause().getStackTrace() + e.getMessage());                handler.post(new Runnable() {                    @Override                    public void run() {                       callback.onFailed(tag,e);                    }                });            }            @Override            public void onResponse(Call call, Response response) throws IOException {                String result = response.body().string();                Log.i(TAG, "onResponse: " + result);                final Object o = GsonUtils.getInstance().fromJson(result, cls);                handler.post(new Runnable() {                    @Override                    public void run() {                        callback.onSuccess(tag,o);                    }                });            }        });    }

}

////////////////////////////////////////////gsonutils

import com.google.gson.Gson;/** * 作者:戈鹏 * on 2017/11/8 22:19 */public class GsonUtils {    private static Gson gson;    public static Gson getInstance(){        if(gson==null){            gson=new Gson();        }        return gson;    }}

//////////////p层

import com.bawei.com.myapplication.bean.Bean;import com.bawei.com.myapplication.callback.CallBack;import com.bawei.com.myapplication.callback.INewsView;import com.bawei.com.myapplication.http.HttpUtils;import java.util.HashMap;import java.util.List;import java.util.Map;public class NewsPresenter {    private INewsView inv;    public void attachView(INewsView inv) {        this.inv = inv;    }    public void getNews() {        //type=top&key=dbedecbcd1899c9785b95cc2d17131c5        Map<String, String> map = new HashMap<>();//        map.put("cid", "1");//        map.put("key", "dbedecbcd1899c9785b95cc2d17131c5");        HttpUtils.getInstance().get("http://120.27.23.105/product/getCatagory", map, new CallBack() {            @Override            public void onSuccess(String tag, Object o) {                Bean bean = (Bean) o;                if (bean != null) {                    List<Bean.DataBean> data = bean.getData();                    inv.success(tag, data);                }            }            @Override            public void onFailed(String tag, Exception e) {                inv.failed(tag, e);            }        }, Bean.class, "news");    }    public void detachView() {        if (inv != null) {            inv = null;        }    }}


原创粉丝点击