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:[email protected] * 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(); }

猜你喜欢

转载自blog.csdn.net/daimengs/article/details/80493674
今日推荐