您的位置:首页 > 理论基础 > 计算机网络

Okhttp的简单二次封装

2017-09-10 19:31 525 查看


写在前面:没什么说的,权当做一个工具类吧

public class OkHttpManager {

////////////////////// 定义成员变量//////////////////////////

private OkHttpClient okHttpClient;

private static android.os.Handler handler;

private volatile static OkHttpManager sManager; // 防止多个线程同时访问 :volatile

/////////////////////使用构造方法,完成初始化////////////////

private OkHttpManager(){

handler = new android.os.Handler();

okHttpClient = new OkHttpClient();

}

////////////////////使用单例模式,通过获取的方式拿到数据/////////////////////

public static OkHttpManager getInstance(){

OkHttpManager instance = null;
if(sManager == null){
synchronized (OkHttpManager.class){

if(instance == null){

instance = new OkHttpManager();
sManager = instance;
}
}
}

return sManager;
}

///////////////////定义接口//////////////////////

// 定义两个接口,用来接下来的调用进行接口回调
interface Func1{

void onRespone(String result);

}

interface Func2{

void onRespone(byte [] result);

}

interface Func3{

void onRespone(JSONObject jsonObject);

}

////////////////////// 使用Handle,接口,保证处理数据的逻辑在主线程 ////////////////////////

private static void onSuccessJsonStringMethod(final String jsonValue, final Func1 callBack){

// 这里使用的是Handle.post方法,把数据放到主线程中,可使用EventBus 或 RxJava 的线程调度器去完成
handler.post(new Runnable() {
@Override
public void run() {

if(callBack != null){

try {

callBack.onRespone(jsonValue);

} catch (Exception e){

e.printStackTrace();

}
}
}
});
}

//////////////////////  暴露一个提供给外界调用的接口 /////////////////////////////////

public void asyncJsonStringByUrl(String url,final Func1 callBack){

final Request request = new Request.Builder().url(url).build();

okHttpClient.newCall(request).enqueue(new Callback() {

@Override
public void onFailure(Call call, IOException e) {

}

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

// 判断response是否有对象,成功
if(response != null && response.isSuccessful()){

onSuccessJsonStringMethod(response.body().string(),callBack);

}
}
});
}
/**
* 下载图片
*/
public void asynJsonByteByURL(String url,final Func2 callBack) {
Request request = new Request.Builder().url(url).build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {

}

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

onSuccessJsonByteMethod(response.body().bytes(), callBack);

}
});
}

/**
*
* 提交表单
*
*/

public void sendComplexForm(String url, Map<String,String> params, final Func1 callBack){

// 表单对象
FormBody.Builder form_builder = new FormBody.Builder();

// 键值非空判断
if(params != null && !params.isEmpty()){

for (Map.Entry<String,String>entry : params.entrySet()){

form_builder.add(entry.getKey(),entry.getValue());

}
}

FormBody request_Body = form_builder.build();

Request request = new Request.Builder().url(url).post(request_Body).build();

okHttpClient.newCall(request).enqueue(new Callback() {

@Override
public void onFailure(Call call, IOException e) {

}

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

// 判断response是否有对象,成功
if(response != null && response.isSuccessful()){

onSuccessJsonStringMethod(response.body().string(),callBack);

}

}
});
}

/**
*
* 下载图片
*
*/
private static void onSuccessJsonByteMethod(final byte[] jsonValue, final Func2 callBack){
handler.post(new Runnable() {
@Override
public void run() {
if(callBack != null) {
try {
callBack.onRespone(jsonValue);
}catch (Exception e){
e.printStackTrace();
}
}
}
});
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Okhttp