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

Okhttp工具类封装

2017-09-14 09:01 399 查看
废话不多讲,直接上代码
package zhangxuelei1506d.utitls;

import android.os.Handler;

import org.json.JSONObject;

import java.io.IOException;
import java.util.Map;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

/**
* Created by Administrator on 2017/9/6.
* 1、okhttp的中级封装   实现两个功能   从服务器下载数据  从客户端提交数据
* 封装优秀的okhttp:okhttputils,okgo(更深入的封装研究okgo)
* 2、节约内存,使所有的网络请求都用一个okhttpclient和handler对象
* 3、解决okhttp网络请求成功代码在子线程中的问题,把请求成功后的逻辑代码放到主线程中执行
* 简化代码量,
* 知识点:  1、单例模式()2、handler 3、接口 4、okhttp
*/

public class OkHttpManager {
public OkHttpClient mClient;
//定义成员变量
public OkHttpClient okHttpClient;
public static Handler mhandler;
public volatile static OkHttpManager sManagerr;

//使用构造方法完成初始化     私有化操作
private OkHttpManager() {
mClient = new OkHttpClient();
mhandler = new Handler();
}

//使用单例模式通过获取的方式拿到对象
public static OkHttpManager getinstance() {
OkHttpManager instance = null;
if (sManagerr == null) {
synchronized (OkHttpManager.class) {
if (instance == null) {
instance = new OkHttpManager();
sManagerr = instance;
}
}
}
return sManagerr;
}

//定义接口
public interface Func1 {
void onRespense(String resule);
}

public interface Func2 {
void onResponse(byte[] result);
}

interface Func3 {
void onResponse(JSONObject jsonObject);
}

//使handler接口保证 处理数据的逻辑在主线程中
//处理请求网络成功的方法,返回的结果是json字符串
private static void onsuccessjsonStringMethod(final String jsonValue, final Func1 callBack) {
mhandler.post(new Runnable() {
@Override
public void run() {
if (callBack != null) {
try {
callBack.onRespense(jsonValue);
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
}
//处理请求网络成功的方法,返回的结果是字节
private static void onsuccessjsonStringMethod(final byte[] bytes, final Func2 callBack) {
mhandler.post(new Runnable() {
@Override
public void run() {
if (callBack != null) {
try {
callBack.onResponse(bytes);
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
}

//暴漏提供给外界调用的方法

/**
* 请求指定的url返回的结果是json字符串
*/
public void asyncjsonstringByurl(String url, final Func1 callBack) {
Request request = new Request.Builder().url(url).build();

mClient.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 sendComplexFrom(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 formBody = form_builder.build();
Request request = new Request.Builder().url(url).post(formBody).build();
mClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {

}

@Override
public void onResponse(Call call, Response response) throws IOException {
if (response != null && response.isSuccessful()) {
onsuccessjsonStringMethod(response.body().string(), callBack);
}
}
});

}
//下载图片
public void LoadImage(String url, final Func2 callBack){
Request request = new Request.Builder().url(url).build();
mClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response != null && response.isSuccessful()) {
onsuccessjsonStringMethod(response.body().bytes(),callBack);
}
}
});
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  okhttp工具类封装