OkHTTP使用

来源:互联网 发布:数据库0基础教程 编辑:程序博客网 时间:2024/05/18 01:58

历史

-简单说一下学习okhttp的理由
1.google在Android 6.0中删除了HttpClient的Api,采用的是则是okhttp
2.高效的使用HTTP,使应用运行更快更省流量
3.响应缓存数据避免重复网络请求
4.无缝的支持GZIP来减少数据流量
5.使用非常简单,请求和响应的Api具有流畅的建造和不变性,同时支持同步异步调用回调函数
6.如果网络出现问题,它会从常见的连接问题中恢复
7.如果服务器配置有多个IP地址,当第一个IP连接失败,它会尝试连接下一个IP

以上是okhttp官网http://square.github.io/okhttp/以及结合网上的一些理解整理出来的,看到有不对的地方还望大家多多指出

下面我们就开始学习怎么使用okhttp吧

配置环境

github地址:https://github.com/square/okhttp

在appMode builde.gradle里面添加上

compile ‘com.squareup.okhttp3:okhttp:3.4.1’

在AndroidManifest.xml添加所需权限

<
uses-permission android:name=”android.permission.INTERNET” />

基本用法

•get异步请求

通过get请求获取指定URL网页请求,这里要注意的是Android4.0以后需要在非主线程里使用。

private OkHttpClient client = new OkHttpClient();
public static void get(){
//创建一个Request
Request request = new Request.Builder()
.url(“http://www.jianshu.com/“)
.get()
.build();
//发起异步请求,并加入回调
client.newCall(request).enqueue(new Callback()
{
@Override
public void onFailure(Call call,IOException e){
//请求失败回调
}
@Override
public void onResponse(Call call,Response response) throws IOException{
//请求成功回调
Log.e(“okHttp”,”get=”+response.body().string());
}
});
}

•post异步请求

private OkHttpClient client = new OkHttpClient();
public static void post(){
//创建Form表单对象,可以add多个键值队
FormBody formBody = new FormBody.Builder()
.add(“param”,”value”)
.add(“param”,”value”)
.build();
//创建一个Request
Request request = new Request.Builder()
.url(“http://www.jianshu.com/“)
.post(formBody)
.build();
//发起异步请求,并加入回调
client.newCall(request).enqueue(new Callback()
{
@Override
public void onFailure(Call call,IOException e){
}
@Override
public void onResponse(Call call,Response response) throws IOException{
Log.e(“okHttp”,”post=”+response.body().string());
}
});
}

•同步请求

把client.newCall(request).enqueue(new Callback())改成
client.newCall(request).execute().body().string()即可

•文件上传与多文件上传

public static void upload(){    //多个文件集合    List<File> list = new ArrayList<>();    MultipartBody.Builder builder = new MultipartBody.Builder();    //设置为表单类型    builder.setType(MultipartBody.FORM);    //添加表单键值    builder.addFormDataPart("param","value");    for (File file : list) {        //添加多个文件        RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);        builder.addFormDataPart("files", file.getName(), fileBody);    }    Request request = new Request.Builder()            .url("http://192.168.1.8/upload/UploadServlet")            .post(builder.build())            .build();    //发起异步请求,并加入回调    mOkHttpClient.newCall(request).enqueue(new Callback()    {        @Override        public void onFailure(Call call,IOException e){        }        @Override        public void onResponse(Call call,Response response) throws IOException{            Log.e("okHttp","updLoad="+response.body().string());        }    });}

•超时设置,整个程序应使用这一个mOkHttpClient对象

public static void setTimeout(){    mOkHttpClient.newBuilder()            .connectTimeout(10, TimeUnit.SECONDS)//10秒连接超时            .writeTimeout(10, TimeUnit.SECONDS)//10m秒写入超时            .readTimeout(10, TimeUnit.SECONDS)//10秒读取超时            .build();}

•文件下载

其实很简单,只需要利用get同步或异步请求,然后通过
client.newCall(request).execute().body().byteStream()
获取InputStream输入流,写文件操作即可实现文件下载。

原创粉丝点击