OkHttp3全面解析&注解工具butterknife

前言:Okhttp3是一个强大的网络请求下载开源框架,本文将会对OkHttp3进行全面解析以及在代码中穿插butterknife的使用。

我将对OkHttp3进行下面六种用途的讲解:

  • GET请求
  • POST请求(Form表单形式)
  • POST请求(JSON格式)
  • 文件下载(简单方式)
  • 文件下载(拦截器方式)
  • OkHttp3的简单封装

    1.GET请求

  • 对于网络加载库,那么最常见的肯定就是http get请求了,比如获取一个网页的内容。

        //我们想像为生成一个客户端
        OkHttpClient client = new OkHttpClient();

        String url = "http://192.168.1.189:5000/user/info?id=1";

        Request request = new Request.Builder()
                        .url(url)
                        .build();
        //请求加入调度
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

                Log.d("MainActivity","失败------"+e.getLocalizedMessage());

            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {


                String result = response.body().string();

                Log.d("MainActivity","成功:"+result);

                if(response.body() !=null){
                    response.body().close();
                }


            }
        });

我们得注意几点:

  • 上传下载功能必须得用异步的方式进行,所以调用call.enqueue,将call加入调度队列,然后等待任务执行完成,我们在Callback中即可得到结果。
  • onResponse回调的参数是response,我们希望获得返回的字符串,可以通过response.body().string()获取;这里我们要注意,把流形式转化为字符串用.string(),把Object形式的对象转化为字符串用.toString().
  • 以流形式操作我们就可以通过IO的方式写文件。不过也说明一个问题,这个onResponse执行的线程并不是UI线程。的确是的,如果你希望操作控件,还是需要使用handler等。
@Override
public void onResponse(final Response response) throws IOException
{
      final String res = response.body().string();
      runOnUiThread(new Runnable()
      {
          @Override
          public void run()
          {
            mTv.setText(res);
          }

      });
}

在平时的学习中,我以及碰到好几次开源框架,如Fresco,OkHttp的代码用如下形式:

  Request request = new Request.Builder()
                        .url(url)
                        .build();

我们对Request的源码进行分析,看看内部如何设计:

public final class Request {


//静态内部类,所以可以用类访问,以及类直接调用构造器:new Request.Builder()来得到一个builder对象。
 public static class Builder{


//方法返回一个Builder对象
  public
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值