Android OKHttp3的初级使用

Android OKHttp3的初级使用


前言

大家都知道,app主要的一个功能就是以数据处理与后台交互,以数据展示与用户交互,那就必然需要使用到网络请求,先接触的网络框架有google推荐的volley,用的比较久,当然还有一些第三方的一些框架,一直用的就是volley,直到去年的时候开始了解到,Retriofit+RxJava组合使用写网络框架不少人推荐,而Retriofi的底层就是OKHttp,个人建议想要学好Retriofit的,最好先了解一下它的基础OKHttp,它的效果性能非常不错,现在已经到是OKHttp3.5版本了。如果你已经了解OKHttp,请帮忙指出文中的不足之处或忽略此文,谢谢。

具体使用

1. 添加配置
compile 'com.squareup.okhttp3:okhttp:3.5.0'
<uses-permission android:name="android.permission.INTERNET" />
2. 使用方法
2.1.1 GET(同步)
public void getRequest(String url){
    //创建OKHttpClient对象,
    OKHttpClient client = new OKHttpClient();
    //创建Request对象,至少要设置请求访问的url
    Request request = new Request.Builder().url(url).build();
    //创建Call对象,创建一个新的请求任务,参数是request对象
    Call call = client.newCall(request);
    try{
    //执行请求,会阻塞当前线程
    Response response = call.execute();
        if(response.isSuccessful()){
        Log.e("response",response.body().string);
        }
    }catch(IOException e){
        e.printStackTrace;
    }
}
2.1.2 GET(异步)
public void getAynscRequest(String url){
    //如果要带参数的话
    //httpUrl=HttpUrl.parse("https://free-api.heweather.com/v5/now")
    //.newBuilder()
    //.addQueryParameter("city","杭州")
    //.addQueryParameter("key"," 84fe66e07e5d449fb8fd687ccb3499a0")
    //.build();

    //创建OKHttpClient对象,
    OKHttpClient client = new OKHttpClient();
    //创建Request对象,至少要设置请求访问的url
    Request request = new Request.Builder().url(url).build();
    //创建Call对象,创建一个新的请求任务,参数是request对象
    Call call = client.newCall(request);
    //将请求加入队列,参数Callback监听,
    Response response = call.enqueue(new Callback(){
        @Override
        public void onFailure(Call call,IOException e){
            Log.e("onFailure","请求失败");
        }

        @Override
        public void onSuccess(Call call,Response response)
        throws IOException{
        if(response.isSuccessful()){
        Log.e("onSuccess",response.body().string);
        }
    });
}

GET返回的response可以获取到InputStream对象(body().byteStream()),然后做写文件操作即可实现文件下载。

2.2.1 Post(同步)
public void postRequest(String url){
    //创建OKHttpClient对象,
    OKHttpClient client = new OKHttpClient();
   //创建Form表单对象,可以add多个键值队
   FormBody formBody = new FormBody.Builder()
   .add("key","84fe66e07e5d449fb8fd687ccb3499a0")
   .add("city","杭州")
   .build();
    //创建Request对象,至少要设置请求访问的url,和post对象
    Request request = new Request.Builder()
    .url(url)
    .post(formBody)
    .build();
    //创建Call对象,创建一个新的请求任务,参数是request对象
    Call call = client.newCall(request);
    try{
    //执行请求,会阻塞当前线程
    Response response = call.execute();
        if(response.isSuccessful()){
        Log.e("response",response.body().string);
        }
    }catch(IOException e){
        e.printStackTrace;
    }
}
2.2.1 Post(异步)
public void postRequest(String url){
   //创建OKHttpClient对象,
   OKHttpClient client = new OKHttpClient();
   //创建Form表单对象,可以add多个键值队
   FormBody formBody = new FormBody.Builder()
   .add("key","84fe66e07e5d449fb8fd687ccb3499a0")
   .add("city","杭州")
   .build();
    //创建Request对象,至少要设置请求访问的url,和post对象
    Request request = new Request.Builder()
    .url(url)
    .post(formBody)
    .build();
    //创建Call对象,创建一个新的请求任务,参数是request对象
    Call call = client.newCall(request);
    //执行请求,会阻塞当前线程
    Response response = call.enqueue(new Callback(){
    @Override
    public void onFailure(Call call,IOException e){
    Log.e("okhttp","Fail");
    }
    @Override
    public void onResponse(Call call,Response response)
    throws IOException{
    Logger.init("okhttp");
    Logger.json(response.body().string());
  }
}
2.3.1 多文件上传
public void Upload(String url){
//多个文件集合
List<File> filelist = new ArrayList<>();
MultipartBody.Builder builder = new MultipartBody.Builder();
//设置表单类型
builder.setType(MultipartBody.FORM);
//添加表单参数,看你自己实际的接口需要多少个
builder.addFormDataPart("name","value");
for(File file: filelist){
    //添加多个文件
    RequestBody filebody = RequestBody.create(MediaType
    .parse("application/octet-stream"),file);
    builder.addFormDataPart("files",file.getName(),filebody);
    }
Request request = new Request.Builder()
    .url(url)
    .post(builder.build())  
    .build();
 OKHttpClient client = new OKHttpClient();
 //发起异步请求上传文件
 client.newCall(request).enqueue(new Callback(){
         @Override
         public void onFailure(Call call,IOException e){
          Log.e("okHttp","fail");
         }
         @Override
         public void onResponse(Call call,Response response)
         throws IOException{
             Logger.init("okHttp");
             Logger.json(response.body().string());
          }
    });
}
3. 小结

本文是针对OKHttp3一些常用的get,post等,算是学习okhttp3的入门资料,有一些关于设置没有列举出来,比如设置连接时长等,细细看一下OKHttpClient下面的方法就知道了,后面要学的还很多,如缓存,封装。如有不对的地方,感谢指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值