简单的封装okhttp

由于公司的项目需要上传文件,利用阿里的oss存储,整个过程比较麻烦。对于网络访问就简单的用okhttp封装了一些需要的方法,比较简单。

主要从ok的两点入手,一是ok获取网络结果是在子线程,无法直接更新比较麻烦,另外就是参数将结果解析。

直接上代码

创建httpmanager类,官方文档都说了最好使用单例,所以我们也就不对着干了。

此处需要注意在2.x版本时,时间时间等设置与3.x版本不一样,如果还像2.x版本设置是没有效果的


public class HttpManager {

private static HttpManager mHttpManager;
// private final OkHttpClient okHttpClient;
private final Gson gson;
private final Handler handler;
private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");//post请求编码
private final OkHttpClient okHttpClient;

public HttpManager() {
//创建OkHttpClient的实例
// okHttpClient = new OkHttpClient();
okHttpClient = new OkHttpClient.Builder()
.readTimeout(1, TimeUnit.MINUTES)
.connectTimeout(1, TimeUnit.MINUTES)
.build();//3.0后最新编辑模式
//解析JSON
gson = new Gson();
//子线程中更新Ui用到Handler
handler = new Handler(Looper.getMainLooper());
}

//单例
public static HttpManager getHttpManager() {
if (mHttpManager == null) {
synchronized (HttpManager.class) {
if (mHttpManager == null) {
mHttpManager=new HttpManager();
}
}
}
return mHttpManager;
}

/**
* get请求
* @param url
* @param baseCallBack
*/
public void get(String url,BaseCallBack baseCallBack,String token){
Request request=buildRequest(url,RequestTyep.GET,token);
doRequest(request,baseCallBack);
}

/**
* post请求
* @param url
* @param baseCallBack
*/
public void postJson(String url,Object json ,String token,BaseCallBack baseCallBack){
Gson gson = new Gson();
/* client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.build();*/
String gsonString = gson.toJson(json);
Request.Builder build=new Request.Builder();
build
.post(buildRequestJsonBody(gsonString))
.url(url)
.addHeader("C_AT_",token);
Request request = build.build();
doRequest(request,baseCallBack);
}
/* ;*/
public void postSetJson(String url,Object json ,String token,BaseCallBack baseCallBack){
String gsonString = gson.toJson(json);
Request.Builder build=new Request.Builder();
build
.post(buildRequestJsonBody(gsonString))
.url(url)
.addHeader("C_AT_",token);
Request request = build.build();
doRequestset(request,baseCallBack);
}

private void doRequestset(Request request, BaseCallBack baseCallBack) {
OkHttpClient.Builder httpBuilder=new OkHttpClient.Builder();
OkHttpClient client=httpBuilder
.readTimeout(30, TimeUnit.SECONDS)
.connectTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS) //设置超时
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {

}

@Override
public void onResponse(Call call, Response response) throws IOException {

}
});
}


public void postJsonString(String url,String json ,String token,BaseCallBack baseCallBack){
Request.Builder build=new Request.Builder();
build
.post(buildRequestJsonBody(json))
.url(url)
.addHeader("C_AT_",token);
Request request = build.build();
doRequest(request,baseCallBack);
}



// okHttpClient.newCall().execute();
public String executepostJson(String url,String json ,String token) throws IOException {
/* Gson gson = new Gson();
String gsonString = gson.toJson(json);*/
Request.Builder build=new Request.Builder();
build
.post(buildRequestJsonBody(json))
.url(url)
.addHeader("C_AT_",token);
Request request = build.build();
// doRequest(request,baseCallBack);
return doExecuteRequest(request);
}



/**
* postJson的body
*/
private RequestBody buildRequestJsonBody(String json) {
RequestBody body = RequestBody.create(JSON,json);
return body;
}

/**
* 创建Request//请求头也可以分装在此
* @return
*/
private Request buildRequest(String url,RequestTyep type,String token) {
Request.Builder build=new Request.Builder();
if (type==RequestTyep.GET){
build.get();
}else if (type==RequestTyep.POST){
build.post(buildRequestBody());
}
build.url(url)
.addHeader("C_AT_",token);
return build.build();
}

/**
* 创建post请求体
* @return
*/
private RequestBody buildRequestBody() {

FormBody.Builder builder=new FormBody.Builder();
return builder.build();
}



/**
* 请求类型
*/
enum RequestTyep{
GET,
POST,
POSTJSON
}

private String doExecuteRequest(Request request) throws IOException {
Response response = okHttpClient.newCall(request).execute();
if (response.isSuccessful()) {
String string = response.body().string();
return string;
} else {
// doExecuteRequest(request);
LogUtils.wyjlog("false");


return "";
}

}


private void doRequest(Request request, final BaseCallBack baseCallBack){

// okHttpClient.newCall().execute();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {

senFailure(baseCallBack,call, e,"未连接上服务器"+e.getMessage());
}

@Override
public void onResponse(Call call, Response response) throws IOException {
boolean successful = response.isSuccessful();
if (successful){
String json = response.body().string();
sendSuccess(baseCallBack,call,json);

}else {
int code=response.code();
ResponseBody body = response.body();
String string = body.string();
senFailure(baseCallBack,call,null,code+"----"+string);
}

}
});
}

/**
* 请求成功的处理
* @param baseCallBack
* @param call
* @param json
*/
private void sendSuccess(final BaseCallBack baseCallBack, final Call call, final String json) {
handler.post(new Runnable() {
@Override
public void run() {
if (baseCallBack.type==String.class){
// baseCallBack.onSuccess(call,json);
try {
baseCallBack.onSuccess(call,json);
} catch (Exception e) {
e.printStackTrace();
}
}else {
Object object = gson.fromJson(json, baseCallBack.type);
try {
baseCallBack.onSuccess(call,object);
} catch (Exception e) {
e.printStackTrace();
}
}

}
});
}
/**
* 请求失败的处理
* @param baseCallBack
* @param call
*
*/
private void senFailure(final BaseCallBack baseCallBack, final Call call, final IOException e, final String code) {
handler.post(new Runnable() {
@Override
public void run() {
baseCallBack.onFailure(call,e);
LogUtils.wyjlog("网络请求状态:"+code);
}
});
}


}

在这里自己创建了个BaseCallBack用于回调

public abstract class BaseCallBack<T> {

Type type;
static Type getSuperclassTypeParameter(Class<?> subclass)
{
Type superclass = subclass.getGenericSuperclass();
if (superclass instanceof Class)
{
throw new RuntimeException("Missing type parameter.");
}
ParameterizedType parameterized = (ParameterizedType) superclass;

return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]);
}

public BaseCallBack()
{
type = getSuperclassTypeParameter(getClass());
}

public abstract void onFailure(Call call, IOException e);

public abstract void onSuccess(Call call, T t) throws Exception;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值