OkHttp简单封装,添加泛型
来源:互联网 发布:淘宝卖家中心我要开店 编辑:程序博客网 时间:2024/06/05 14:52
对OkHttp的简单封装,可以实现上传图片,添加泛型
import com.google.gson.Gson;
import com.google.gson.internal.$Gson$Types;import java.io.File;
import java.io.IOException;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Map;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class OkHttpManager {
private final OkHttpClient okHttpClient;
private ResultCallback mcallBack;
private final Gson gson;
private volatile static OkHttpManager okHttpManager;
private OkHttpManager(){
okHttpClient = new OkHttpClient();
gson = new Gson();
}
public static OkHttpManager getInstance(){
if (okHttpManager == null) {
synchronized (OkHttpManager.class) {
if (okHttpManager == null) {
okHttpManager = new OkHttpManager();
}
}
}
return okHttpManager;
}
public void requestAsyn(String url, Map<String,Object> map,ResultCallback callBack){
this.mcallBack = callBack;
Request request = null;
request = getRequest(url, map);
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
mcallBack.onFailure(call,e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String json = response.body().string();
mcallBack.onResponse(call,gson.fromJson(json,mcallBack.mType),json);
}
});
}
private Request getRequest(String url, Map<String, Object> params) {
Request request;
if (params == null || params.size() == 0) {
request = new Request.Builder().url(url).get().build();
} else {
MultipartBody.Builder multipartBody = new MultipartBody.Builder();
multipartBody.setType(MultipartBody.FORM);
for (Map.Entry<String, Object> stringObjectEntry : params.entrySet()) {
if (stringObjectEntry.getValue() instanceof File) {
File file = (File) stringObjectEntry.getValue();
multipartBody.addFormDataPart(stringObjectEntry.getKey(),
file.getName(), RequestBody.create(MediaType.parse("image/*"), file));
} else {
multipartBody.addFormDataPart(stringObjectEntry.getKey(), (String) stringObjectEntry.getValue());
}
}
MultipartBody build = multipartBody.build();
request = new Request.Builder().url(url).post(build).build();
}
return request;
}
public static abstract class ResultCallback<T>
{
Type mType;
public ResultCallback()
{
mType = getSuperclassTypeParameter(getClass());
}
static Type getSuperclassTypeParameter(Class<?> subclass)
{
//通过反射得到泛型参数
//Type是 Java 编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型变量和基本类型。
Type superclass = subclass.getGenericSuperclass();
if (superclass instanceof Class)
{
throw new RuntimeException("Missing type parameter.");
}
//ParameterizedType参数化类型,即泛型
ParameterizedType parameterized = (ParameterizedType) superclass;
//getActualTypeArguments获取参数化类型的数组,泛型可能有多个
//将Java 中的Type实现,转化为自己内部的数据实现,得到gson解析需要的泛型
return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]);
}
public abstract void onFailure(Call call, IOException e);
public abstract void onResponse(Call call,T response,String json);
}
}
阅读全文
0 0
- OkHttp简单封装,添加泛型
- okhttp的简单封装
- OkHTTp简单封装
- okHttp简单封装使用
- OkHttp简单封装
- OkHttp的简单封装
- 简单封装okhttp
- okhttp的简单封装
- okhttp简单封装
- 简单的封装okhttp
- OkHttp简单功能封装
- OkHttp简单封装
- OKhttp简单封装
- OKHTTP的简单封装
- 非常简单封装Okhttp
- okhttp简单封装
- okhttp的简单封装
- okhttp简单封装+使用
- 互联网分层架构,为啥要前后端分离?
- JavaEE结合quartz实现订单自动失效功能
- java学习第37天,集合转换数组
- 2017.10.25 LeetCode
- UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK编码
- OkHttp简单封装,添加泛型
- linux下解压命令大全
- Android多层View点击穿透问题
- JWT -- JSON WEB TOKEN
- 将项目发布到云主机,插入记录时显示错误:将截断字符串或二进制数据。
- keras2.0 Merge层改为函数式
- 菜单分栏tableView
- WEBGL学习【一】初识WEBGL
- codeforces551A 【python】