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

封装Okhttp(Gson一起封装在里面减少了解析的操作)

2016-11-12 16:14 543 查看
public class OkSingle {
protected static Context context;
private static OkSingle okSingle;
private static OkHttpClient mOkHttpClient;
private static Gson gson;

private static final int SUCCESS = 1;
private static final int FAILED = 0;

public OkSingle(OkHttpClient okHttpClient) {
if (okHttpClient == null) {
mOkHttpClient = new OkHttpClient();
} else {
mOkHttpClient = okHttpClient;
}
//获取MyApplication的context
context = MyApplication.context;
gson = new Gson();

}

public static OkSingle initClient(OkHttpClient okHttpClient) {
if (okSingle == null) {
synchronized (OkSingle.class) {
if (okSingle == null) {
okSingle = new OkSingle(okHttpClient);
}
}
}
return okSingle;

}

//获得单例的对象
public static OkSingle getInstance() {
return initClient(null);

}

public <T> void getRequestAsync(String url,
final GetResponse.ErrorListener errorListener,
final GetResponse.Listener<T> listener,
final Class<T> tClass) {
Request request = new Request.Builder().url(url).build();
//这种写法,可以让Handler指定属于主线程

final Handler handler = new Handler(Looper.getMainLooper()) {

@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case SUCCESS:
//成功时候的回调
listener.onResponse((T) msg.obj);
break;
case FAILED:
errorListener.onErrorResponse();
break;
}

}
};

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

@Override
public void onFailure(Call call, IOException e) {
errorListener.onErrorResponse();
}

@Override
public void onResponse(Call call, Response response) throws IOException {
try {
String result = response.body().string();
T t = gson.fromJson(result, tClass);
Message message = handler.obtainMessage();//这种写法比较省内存
message.what = SUCCESS;
message.obj = t;
handler.sendMessage(message);
} catch (IOException e) {
e.printStackTrace();
//因为是失败,所以返回失败,在主线程中判断
handler.sendEmptyMessage(FAILED);
}
}

});

}

//自定义接口
public interface GetResponse {

//成功的接口
interface Listener<T> {
void onResponse(T response);
}
//失败的接口
interface ErrorListener {
void onErrorResponse();
}
}

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