OkHttp初认识

今天学习了一下关于网络框架OkHttp,我今天看了一下,应该是最新的是3.3版本了吧.所以我们要在Gradle中要配置

compile files('libs/okio-1.9.0.jar')
compile 'com.squareup.okhttp3:okhttp:3.3.1'    

因为OkHttp内部依赖okio,所以我们两个包都要导入.

当然我们需要介绍一下OkHttp的好处了:

一般的get请求
一般的post请求
基于Http的文件上传
文件下载
加载图片
支持请求回调,直接返回对象、对象集合
支持session的保持
二.技能实战

get请求

OkHttpClient client = new OkHttpClient();
 final Request request = new Request.Builder().get().url(image_path).build();
  client.newCall(request).enqueue(new Callback() {//加入队列,这里是异步处理
                //这里是利用了队列的回调,返回成功与不成功的信息
                @Override
                public void onFailure(Request request, IOException e) {
                    e.printStackTrace();
                }

                @Override
                public void onResponse(Response response) throws IOException {
                    Message message = mHandler.obtainMessage();//获得信息
                    if (response.isSuccessful()) {
                        message.what = SUCCESS_STATUS;//成功
                        message.obj = response.body().bytes();
                        mHandler.sendMessage(message);
                    } else {
                        mHandler.sendEmptyMessage(FAIL_STATUS);//返回失败状态

                    }
                }

上面的逻辑我们可以分析到几个问题:

通过参数url访问,并且构造一个request 对象
通过request构造一个call,来进行任务封装,当然这里我们可以看到我们通过将call放到enqueue作为我们的任务调度队列
我们在成功相应的OnRequest中,存在几个类型的回调
response.body.bytes(),二进制字节数组
reponsee.body.string(),字符串
response.body().byteStream(),流对象
这个相应的调度是在子线程的,所以我们上面通过Handler,来发送信息,告诉UI主线程进行界面的刷新.
call存在着异步的调度enqueue,同步的调度execute(会堵塞).

FormEncodingBuilder form_builder = new FormEncodingBuilder();//表单对象,包含以input开始的对象

 if (params != null && params.isEmpty()) {

 for (Map.Entry<String, String> entry : params.entrySet()) {
        form_builder.add(entry.getKey(), entry.getValue());
    }
    RequestBody request_body=form_builder.build();
    Request request = new Request.Builder().url(url).post(request_body).build();//采用post方式提交
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Request request, IOException e) {
            e.printStackTrace();
        }
        @Override
        public void onResponse(Response response) throws IOException {
            if (response!=null&&response.isSuccessful()){  //这里获取返回信息
                onSuccessJsonObjectMethod(response.body().string(), callBack);
            }
        }  

构造的是FormEncodingBuilder来添加键值对.

文件上传

   File file = new File(Environment.getExternalStorageDirectory(), "beijingbeijing.mp4");
    RequestBody fileBody = RequestBody.create(MediaType.parse(“application/octet-stream”), file);//定义类型
    RequestBody requestBody = new MultipartBuilder() 
    .type(MultipartBuilder.FORM) 
    .addPart(Headers.of( “Content-Disposition”, “form-data; name=\”username\”“), 
    RequestBody.create(null, “Fung”)) 
    .addPart(Headers.of( “Content-Disposition”, “form-data; name=\”mFile\”; 
    filename=\”wjd.mp4\”“), fileBody) .build(); //这里是通过构造出浏览器类似模块
    Request request = new Request.Builder().url(“http://192.168.1.103:8080/okHttpServer/fileUpload“) 
   .post(requestBody) 
   .build();
   Call call = mOkHttpClient.newCall(request); 
   call.enqueue(new Callback() { 
    //… 
});

我们这里是通过拼接模拟器行为进行上传文件,并且添加了键值对和文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值