okHttp简单封装

import android.os.Environment; import android.os.Handler; import android.os.Message; import android.util.Log; import java.io.File; import java.io.IOException; import java.util.Map; import java.util.concurrent.TimeUnit; import okhttp3.Cache; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; /** * Author:kson * E-mail:19655910@qq.com * Time:2018/05/08 * Description:okhttp封装 */ public class OkHttpUtils { //单例设计模式/其他比如builder模式 //封装常用的请求方式,get、post //扩展:封装拦截器以及其他的扩展功能 private static OkHttpUtils okHttpUtils; private OkHttpClient okHttpClient; static String result = ""; private static Handler handler; private ICallback iCallback; private final String LOGNAME=OkHttpUtils.class.getCanonicalName(); private OkHttpUtils() { handler = new Handler() { @Override public void handleMessage(Message msg) { if (iCallback != null) { iCallback.getData(msg.obj.toString()); } } }; initOK(); } public void setiCallback(ICallback iCallback) { this.iCallback = iCallback; } /** * 创建ok */ private void initOK() { Log.e(LOGNAME,"初始化ok"); File file=new File(Environment.getExternalStorageDirectory(),"CacheOK"); okHttpClient = new OkHttpClient.Builder() .readTimeout(10, TimeUnit.SECONDS) .writeTimeout(1000, TimeUnit.MILLISECONDS)//毫秒制 .cache(new Cache(file,1000))//sdcard本地缓存 .connectTimeout(5, TimeUnit.SECONDS).build();//秒制 } public OkHttpUtils getInstance() { if (okHttpUtils == null) { synchronized (OkHttpUtils.class) { if (okHttpUtils == null) { okHttpUtils = new OkHttpUtils(); } } } return okHttpUtils; } /** * get请求 * * @return */ public void DoGet(String url) {
            if(iCallback==null){                 Log.e(LOGNAME,"iCallback=null setiCallback没有调用建立连接");
return;             }else{
  Log.e(LOGNAME,"DOGet");
}
Request request = new Request.Builder() .url(url) .get().build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.e(LOGNAME,"DoGET异常"); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { if (response.code() == 200) { result = response.body().string(); Message message = new Message(); message.obj = result; handler.sendMessage(message); } } } }); } /** * post请求:1原生表单 2.支持文件的,或者两个方式封装到一个方法里 * * @return */ public void DoPost(Map<String, String> params) { if(params==null||params.size()==0||iCallback==null){ if(params==null){ Log.e(LOGNAME,"参数对象无实力"); } if(params.size()==0){ Log.e(LOGNAME,"参数数量为零"); } if(iCallback==null){ Log.e(LOGNAME,"iCallback=null setiCallback没有调用建立连接"); } return; }else { Log.e(LOGNAME,"DoPost"); } //1.FORM原生表单,<form></form>(单纯提交字符串类型的键值对)2.multipart/form-data(1.字符串类型键值对和文件) 3.raw(json、xml) 4.binary(文件流) //1.普通表单 //普通表单 FormBody.Builder builder = new FormBody.Builder(); for (Map.Entry<String, String> stringStringEntry : params.entrySet()) { if (!"url".equals(stringStringEntry.getKey())) { builder.add(stringStringEntry.getKey(), stringStringEntry.getValue()); } } Request request = new Request.Builder() .url(params.get("url")) .post(builder.build()).build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.e(LOGNAME,"DOPost异常"); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { if (response.code() == 200) { Log.e(LOGNAME,"请求成功"); result = response.body().string(); Message message = new Message(); message.obj = result; handler.sendMessage(message); } } } }); } /** * post请求:2.支持文件的,或者两个方式封装到一个方法里 * * @return */ public void DoUpFile(Map<String, Object> params) { if(params==null||params.size()==0||iCallback==null){ if(params==null){ Log.e(LOGNAME,"参数对象无实力"); } if(params.size()==0){ Log.e(LOGNAME,"参数数量为零"); } if(iCallback==null){ Log.e(LOGNAME,"iCallback=null setiCallback没有调用建立连接"); } return; }else { Log.e(LOGNAME,"DoPost"); } //1.FORM原生表单,<form></form>(单纯提交字符串类型的键值对)2.multipart/form-data(1.字符串类型键值对和文件) 3.raw(json、xml) 4.binary(文件流) //1.普通表单 //multipart/form-data MultipartBody.Builder builder = new MultipartBody.Builder(); builder.setType(MultipartBody.FORM); for (Map.Entry<String, Object> stringObjectEntry : params.entrySet()) {//便利 String key = stringObjectEntry.getKey();//取值建 Object value = stringObjectEntry.getValue();//取值 if (value instanceof File) {//是否是文件实力 File file = (File) value; if(!file.exists()){//判断是否可执行文件 file.mkdirs(); if(!file.isFile()){//是否文件 try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } } //MediaType.parse("application/octet-stream")以二进制的形式上传文件 builder.addFormDataPart(key, file.getName(), RequestBody.create(MediaType.parse("application/octet-stream"), file)); } else { if(!"url".equals(key)){ builder.addFormDataPart(key, value.toString()); } } } Request request = new Request.Builder() .url(params.get("url").toString()) .post(builder.build()).build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.e(LOGNAME,"DOUpFile异常"); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { if (response.code() == 200) { Log.e(LOGNAME,"上传成功"); result = response.body().string(); Message message = new Message(); message.obj = result; handler.sendMessage(message); } } } }); } public interface ICallback { void getData(String result); void fairly(); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值