okhttp 2.x 用法/封装
android的网络框架okhttp被普遍使用,包括现在比较强大的retrofit也是封装okhttp 简单了解okhttp(get/post):
//get请求:
private void getRequest() {
//创建okHttpClient对象
OkHttpClient mOkHttpClient = new OkHttpClient();
final Request request = new Request.Builder()
.url("http://www.baidu.com")
.build();
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(final Response response)
throws IOException {
//异步请求 更新UI需要切到主线程
}
});
}
});
}
//post请求
private void postAsynHttp() {
OkHttpClient mOkHttpClient = new OkHttpClient();
//设置post请求数据
RequestBody formBody = new FormEncodingBuilder()
.add("size", "10")
.build();
Request request = new Request.Builder()
.url("http://blog.csdn.net/soullines/article/details/78040109")
.post(formBody)
.build();
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response)
throws IOException {
});
}
});
}
当然okhttp的使用需要封装 —->当然okhttp可以设置请求超时和设置缓冲
public class OkHttpEngine {
private static OkHttpEngine mInstance;
private OkHttpClient mOkHttpClient;
private Handler mHandler;
//单例模式
public static OkHttpEngine getInstance() {
if (mInstance == null) {
synchronized (OkHttpEngine.class) {
if (mInstance == null) {
mInstance = new OkHttpEngine();
}
}
}
return mInstance;
}
//设置超时
private setTimeout() {
mOkHttpClient = new OkHttpClient();
mOkHttpClient.setConnectTimeout(15, TimeUnit.SECONDS);
mOkHttpClient.setWriteTimeout(20, TimeUnit.SECONDS);
mOkHttpClient.setReadTimeout(20, TimeUnit.SECONDS);
mHandler = new Handler();
}
//设置缓冲
public void setCache(Context mContext) {
File sdcache = mContext.getExternalCacheDir();
int cacheSize = 10 * 1024 * 1024;
mOkHttpClient.setCache(new Cache(sdcache.getAbsoluteFile(), cacheSize));
}
/**
* 异步get请求
* @param url
* @param callback
*/
public void getAsynHttp(String url, ResultCallback callback) {
final Request request = new Request.Builder()
.url(url)
.build();
Call call = mOkHttpClient.newCall(request);
dealResult(call, callback);
}
private void dealResult(Call call, final ResultCallback callback) {
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
sendFailedCallback(request, e, callback);
}
@Override
public void onResponse(final Response response) throws IOException {
sendSuccessCallback(response, callback);
}
private void sendSuccessCallback(final Response objec
t, final ResultCallback callback) {
mHandler.post(new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onResponse(object);
}
}
});
}
private void sendFailedCallback(final Request
request, final Exception e, final ResultCallback
callback) {
mHandler.post(new Runnable() {
@Override
public void run() {
if (callback != null)
callback.onError(request, e);
}
});
}
});
}
}
//okhttp封装之后的使用
OkHttpEngine.getInstance()
.setTimeout()//可以修改封装代码 动态设置请求超时时间
.setCache(this)
.getAsynHttp("http://www.baidu.com", new ResultCallback() {
@Override
public void onError(Request request, Exception e) {
}
@Override
public void onResponse(Response response) {
}
});
简单的okhttp封装,android中可定制使用