OkHttp的使用

OkHttp是Square出的Http通讯库,支持HTTP和HTTP/2,用于Android应用和Java应用。

OkHttp是非常优秀的Http通讯库,将Http连接中各种繁杂的问题,对并发的支持,对常见异常的处理等封装在底层,提供简单易用的API供应用中调用。与之相比,HttpUrlConnection的使用过于复杂,Appache的HttpClient在Android平台上的运行又有各种问题,在Android 6.0之后,已经将HttpClient库从SDK中删除,全面转向使用OkHttp。

目前有很多知名的Android三方框架都使用OkHttp作为网络连接的默认基栈,例如Volley,Glide,Retrofit等,从中也能看出学习OkHttp的必要性。

        maven依赖

<dependency>

        <groupId>com.squareup.okhttp3</groupId>

<artifactId>okhttp</artifactId>
 <version>3.6.0</version>

</dependency>


public class OkhttpUtil {


private static final Logger log = Logger.getLogger(OkhttpUtil.class);
private static final OkHttpClient httpClient = new OkHttpClient();
public static final MediaType JSON = MediaType.parse("application/json; charset=UTF-8");
public static final MediaType MediaTypeFlie = MediaType.parse("application/json; charset=UTF-8");


/**
* 不会开启异步线程。

* @param request
* @return
* @throws IOException
*/
public static Response execute(Request request) throws IOException {
return httpClient.newCall(request).execute();
}


/**
* 开启异步线程访问网络

* @param request
* @param responseCallback
*/
public static void enqueue(Request request, Callback responseCallback) {
httpClient.newCall(request).enqueue(responseCallback);
}


/**
* 开启异步线程访问网络, 且不在意返回结果(实现空callback)

* @param request
*/
public static void enqueue(Request request) {
httpClient.newCall(request).enqueue(new Callback() {
public void onFailure(Call call, IOException e) {
log.debug("Call:" + call, e);
}


public void onResponse(Call call, Response rep) throws IOException {
log.debug("Call:" + call + ",Response:" + rep);
}
});
}


public static String doGetHttpRequest(String url) throws IOException {
Request request = new Request.Builder().url(url).build();
Response response = execute(request);
if (!response.isSuccessful()) {
throw new IOException("Server Connection Failed:" + response);
}
return response.body().string();
}


public static String doPostHttpRequest(String url, String json) {
Request request = new Request.Builder().url(url).post(RequestBody.create(JSON, json)).build();
try {
Response response = execute(request);
if (!response.isSuccessful()) {
System.out.println("Server Connection Failed:" + response);
}
return response.body().string();
} catch (IOException e) {
System.out.println(e.getMessage());
e.printStackTrace();
return null;
}
}





/**
* 文件上传 OKHttpUtil

* @return String

*/
public static String upLoad(String url,String fileName, String path) {

File file = new File(path, fileName);
RequestBody fileBody = RequestBody.create(MediaTypeFlie, file);
RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("image", fileName, fileBody).build();
Request request = new Request.Builder().url(url).post(requestBody).build();
final okhttp3.OkHttpClient.Builder httpBuilder = new OkHttpClient.Builder();
OkHttpClient okHttpClient = httpBuilder// 设置超时
.connectTimeout(10, TimeUnit.SECONDS).writeTimeout(15, TimeUnit.SECONDS).build();
okHttpClient.newCall(request).enqueue(new Callback() {

@Override
public void onFailure(Call call, IOException e) {
log.error("uploadMultiFile() e=" + e);
}


@Override
public void onResponse(Call call, Response response) throws IOException {
log.error("uploadMultiFile() response=" + response.body().string());
}

});
return "success";
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值