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; } }}
阅读全文
0 0
- mvp封装的OKhttp
- 基于OKhttp的MVP封装
- RxJava+okhttp+Retrofit+Mvp 的封装
- MVP模式+OKhttp的封装请求数据
- Android当中的MVP模式(四)插曲-封装OkHttp
- 终极封装 Rxjava+Retrofit+okhttp+mvp实现
- Android当中的MVP模式(五)封装之后的OkHttp工具在Model层
- Android——MVP架构OkHttp的二次封装以及RecyclerView的使用
- okhttp的简单封装
- okhttp的封装
- okHttp的封装
- okhttp框架的封装
- OkHttp的简单封装
- okhttp的简单封装
- OkHttp的二次封装
- OkHttp的封装
- OkHttp的封装方法
- OKHTTP的封装
- Baidu地图
- scala基础
- 二进制文件与base64编码文本文件转换
- ASP.NET MVC
- 牧场上的草泥马(游荡的奶牛)
- mvp封装的OKhttp
- springmvc + AOP 获取Controller HttpServletRequest及HttpServletResponse
- 分享18个常用的网站性能测试工具
- php中使用mb_strlen解决中文字符数
- cocos android 打开相机,相册并裁剪
- A Cookbook for Machine Learning: Vol 1
- ASP.NET MVC
- STM32:利用VM8978和I2S实现录音的频率分析
- Linux下用 lsof 命令查找指定端口被哪个进程占用