Android okhttp3封裝
阿新 • • 發佈:2018-12-30
Okhttp確實是功能強大,高效率,簡潔的網路請求框架,所以最近專案也集成了改框架,寫了一個Manager管理類,整理下給大家看下。
***
* 使用OkHttp框架執行網路請求
*
*/
public class OkHttpManager {
private static final String TAG = "OkHttpManager";
//提交json資料
private static final MediaType JSON = MediaType.parse(
"application/json;charset=utf-8" );
//提交字串資料
private static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse(
"text/x-markdown;charset=utf-8");
public final static int CONNECT_TIMEOUT = 60;
public final static int READ_TIMEOUT = 100;
public final static int WRITE_TIMEOUT = 60;
private static OkHttpManager mInstance;
private OkHttpClient mOkHttpClient;
private Handler handler;
private OkHttpManager() {
mOkHttpClient = new OkHttpClient.Builder()
.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
.readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
.writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
.build();
handler = new Handler(Looper.getMainLooper());//主執行緒處理
}
public synchronized static OkHttpManager getInstance() {
if (mInstance == null) {
mInstance = new OkHttpManager();
}
return mInstance;
}
public void getRequest(String url, final ResultCallback callback) {
Request request = new Request.Builder().url(url).build();
deliveryResult(callback, request);
}
private void postRequest(String url, final ResultCallback callback,
List<OkHttpParam> params) {
Request request = buildPostRequest(url, params);
}
/**
* post非同步請求
* josn引數
* @param url
* @param callback
* @param json
*/
private void postRequest(String url, final ResultCallback callback,
String json) {
Request request = buildPostRequest(url, json);
deliveryResult(callback, request);
}
private void deliveryResult(final ResultCallback callback, Request request) {
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
sendFailCallback(callback, e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
sendSuccessCallBack(callback, response);
} catch (final Exception e) {
sendFailCallback(callback, e);
}
}
});
}
/**
* 非同步請求
*
* @param url
* @param callBack
*/
public void getUrl(String url, final HttpCallBack callBack) {
Request request = new Request.Builder().url(url).build();
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
callBack.onFailure(e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
callBack.onSuccess(response);
}
});
}
/**
* 上傳檔案
*
* @param url
* @param file
* @param callback
*/
public void postFile(String url, File file, Callback callback) {
RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
RequestBody requestBody = new MultipartBody.Builder().addFormDataPart("filename", file.getName(), fileBody).build();
Request requestPostFile = new Request.Builder()
.url(url)
.post(requestBody)
.build();
mOkHttpClient.newCall(requestPostFile).enqueue(callback);
}
/**
* 多個引數請求
*
* @param url
* @param params
* @return
*/
private Request buildPostRequest(String url, List<OkHttpParam> params) {
FormBody.Builder builder = new FormBody.Builder();
for (OkHttpParam param : params) {
builder.add(param.key, param.value);
}
RequestBody formBody = builder.build();
return new Request.Builder().url(url).post(formBody).build();
}
/**
* json引數
*
* @param url
* @param json
* @return
*/
private Request buildPostRequest(String url, String json) {
RequestBody requestBody = RequestBody.create(JSON, json);
return new Request.Builder().url(url).post(requestBody).build();
}
private void sendFailCallback(final ResultCallback callback, final Exception e) {
handler.post(new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onFailure(e);
}
}
});
}
private void sendSuccessCallBack(final ResultCallback callback,
final Response response) {
handler.post(new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onSuccess(response);
}
}
});
}
/**
* get請求
*
* @param url 請求url
* @param callback 請求回撥
*/
public static void get(String url, ResultCallback callback) {
getInstance().getRequest(url, callback);
}
public static void get(String url) {
get(url, new ResultCallback() {
@Override
public void onSuccess(Response response) {
}
@Override
public void onFailure(Exception e) {
}
});
}
/**
* post請求
*
* @param url 請求url
* @param callback 請求回撥
* @param params 請求引數
*/
public static void post(String url, List<OkHttpParam> params,
final ResultCallback callback) {
getInstance().postRequest(url, callback, params);
}
/**
* post請求
*
* @param url 請求url
* @param callback 請求回撥
* @param json 請求json
*/
public static void post(String url, String json,
final ResultCallback callback) {
getInstance().postRequest(url, callback, json);
}
/**
* http請求回撥類,回撥方法在UI執行緒中執行
*/
public static abstract class ResultCallback {
/**
* 請求成功回撥
*
* @param response
*/
public abstract void onSuccess(Response response);
/**
* 請求失敗回撥
*
* @param e
*/
public abstract void onFailure(Exception e);
}
/**
* post請求引數類
*/
public static class OkHttpParam {
String key;
String value;
public OkHttpParam() {
}
public OkHttpParam(String key, String value) {
this.key = key;
this.value = value;
}
}
/**
* 請求回撥介面
*/
public interface HttpCallBack {
void onSuccess(Response response);
void onFailure(Exception e);
}