okhttputils封装
来源:互联网 发布:js防水涂料厚度 编辑:程序博客网 时间:2024/05/17 23:52
//OkhttpUtils封装
package test.j.com.mvpshopdemo.okhttp;
import java.io.File;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
/** * Created by muni on 17/11/10.
* * * Okhttp 单例 范型的封装 */
public class OkhttpUtils {
private static OkhttpUtils okhttpUtils = null ;
private OkhttpUtils(){
}
public static OkhttpUtils getInstance(){
if(okhttpUtils == null){
okhttpUtils = new OkhttpUtils();
client = new OkHttpClient.Builder()
.readTimeout(20, TimeUnit.SECONDS)
.writeTimeout(20,TimeUnit.SECONDS)
.connectTimeout(20,TimeUnit.SECONDS)
//添加拦截器 .addInterceptor(new LoggingInterceptor())
.build();
}
return okhttpUtils ;
}
private static OkHttpClient client ;
/** * 发起异步请求
* @param params
* @param url
* @param callBack */
public void asy(Map<String,String> params,String url,AbstractUiCallBack callBack){
Request request = null ;
if(params != null){
// post 请求
FormBody.Builder builder = new FormBody.Builder() ;
for(Map.Entry<String,String> entry : params.entrySet()){
builder.add(entry.getKey(),entry.getValue());
}
FormBody body = builder.build();
request = new Request.Builder()
.url(url)
.post(body)
.build();
} else {
// get 请求
request = new Request.Builder()
.url(url)
.build();
}
client.newCall(request).enqueue(callBack);
}
private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
public static void postFile(Map<String,String> map, String url, File file,AbstractUiCallBack callBack){
String [] array = file.getAbsolutePath().split("\\/");
MultipartBody.Builder builder = new MultipartBody.Builder();
builder.setType(MultipartBody.FORM);
for(Map.Entry<String,String> entry : map.entrySet()){
builder.addFormDataPart(entry.getKey(),entry.getValue());
}
builder.addFormDataPart("imageFileName",array[array.length-1]);
if(file.exists() && file.length() > 0){
builder.addFormDataPart("image",array[array.length-1], RequestBody.create(MEDIA_TYPE_PNG,file));
}
MultipartBody body = builder.build() ;
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
client.newCall(request).enqueue(callBack);
}//AbstractUiCallBack
package test..com.mvpshopdemo.okhttp;import android.os.Handler;import android.os.Looper;import com.google.gson.Gson;import com.google.gson.JsonSyntaxException;import java.io.IOException;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import okhttp3.Call;import okhttp3.Callback;import okhttp3.Response;/** * Created by muax on 17/11/10. * * * Okhttp 单例 范型的封装 */public abstract class AbstractUiCallBack<T> implements Callback { /** * 成功回调 * @param t */ public abstract void success(T t); /** * 失败回调 * @param e */ public abstract void failure(Exception e); private Handler handler = null ; private Class clazz ; public AbstractUiCallBack(){ handler = new Handler(Looper.getMainLooper()); // 得到的是一个 AbstractUiCallBack<T> 的Type Type type = getClass().getGenericSuperclass() ; // 得到的是T的实际Type Type [] arr = ((ParameterizedType)type).getActualTypeArguments() ; clazz = (Class) arr[0] ; } @Override public void onFailure(Call call, IOException e) { failure(e); } @Override public void onResponse(Call call, Response response) throws IOException { try { String result = response.body().string(); System.out.println("result = " + result); Gson gson = new Gson(); final T t = (T) gson.fromJson(result,clazz); handler.post(new Runnable() { @Override public void run() { success(t); } }); } catch (IOException e) { e.printStackTrace(); failure(e); } catch (JsonSyntaxException e) { e.printStackTrace(); failure(e); } }}}
//LoggingInterceptor公共参数拦截器package test.j.com.mvpshopdemo.okhttp;import java.io.IOException;import okhttp3.FormBody;import okhttp3.Interceptor;import okhttp3.Request;import okhttp3.RequestBody;import okhttp3.Response;/** * 可以实现 添加公共请求参数 */public class LoggingInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { //首先取到Request Request request = chain.request(); Response response = null; Request requestProcess = null ; if("GET".equals(request.method())){ String url = request.url().toString() + "&source=android"; Request.Builder builder = request.newBuilder() ; builder.get().url(url); requestProcess = builder.build(); response = chain.proceed(requestProcess); } else { FormBody.Builder builder = new FormBody.Builder() ; RequestBody requestBody = request.body() ; if(requestBody instanceof FormBody){ FormBody formBody = (FormBody)requestBody ; for (int i=0;i<formBody.size();i++){ builder.add(formBody.encodedName(i),formBody.encodedValue(i)); } builder.add("source","android"); } requestProcess = request.newBuilder().url(request.url().toString()).post(builder.build()).build() ; response = chain.proceed(requestProcess); } return response; }}
阅读全文
0 0
- okhttputils封装
- 封装封装OkHttpUtils
- Okhttputils终极封装
- 简单okHttpUtils封装
- OkHttpUtils进一步的封装
- OkHttpUtils的封装
- OkHTTPUTILS的封装
- 已封装了的OkHttpUtils
- NetCallBack 泛型封装 + okhttputils封装
- OkHttpUtils - 封装了okhttp的网络框架
- OkHttpUtils - 封装了okhttp的网络框架
- OkHttpUtils - 封装了okhttp的网络框架
- OkHttpUtils - 封装了okhttp的网络框架
- 超简单的okHttpUtils封装(下)
- okhttpUtils的简单使用以及封装
- 基于OkHttpUtils再次封装代码最简化
- OkHttpUtils
- OkHttpUtils
- GC 垃圾回收算法,新生代,老年代,持久代
- Android之json复杂数据解析
- 设计模式
- HDU2003
- MySQL出现Waiting for table metadata lock的原因以及解决方法
- okhttputils封装
- JS性能优化之文档碎片创建
- 推荐算法之FFM:原理及实现简介
- 一篇关于常用证件的验证方法
- IDA Pro使用(静态分析+动态调试)
- Unable to get element from the feed as bytes.解决
- 接口多态继承
- CSS小技巧汇总
- 爬取js渲染过的页面(爬取一个婚庆网站为例)