火热轻量级网络框架okhttp3的使用

火热轻量级网络框架okhttp3的使用

okhttp3是网上最火的一款轻量级网络框架 该框架能够高效率的允许连接到同一个主机地址的所有请求 同时 还能够缓存响应数据来减少重复的网络请求 以及数据流量的消耗…

  • OKhttp使用
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.okio:okio:1.7.0'
<!--网络权限-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--文件操作权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

OkHttpClient 对象初始化方法

okhttp有属性设置
private OkHttpClient okHttpC =null;
OkHttpClient.Builder builder = new OkHttpClient.Builder()
        .connectTimeout(120, TimeUnit.SECONDS)
        .readTimeout(120, TimeUnit.SECONDS)
        .writeTimeout(120, TimeUnit.SECONDS);
okHttpC = builder.build();

OkHttpClient(无属性)
OkHttpClient okHttpC = new OkHttpClient();

Request(请求对象) 请求网络url地址

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

同步请求(这里要try catch),当okhttp请求任务时还没被释放这时再次请求会造成线程阻塞,直至第一个任务解锁完成后第二个任务才能被执行

Response response = okHttpC.newCall(request).execute();
System.out.println(response.body().string())

异步请求 (开启子线程请求操作在子线程里完成)

 okHttpC.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

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

            }
        });

post请求(RequestBody 请求处理传参)

 RequestBody formBody = new FormBody.Builder()
                .add("name", "e")
                .build();
Request request =new Request.Builder().url("").post(formBody).build();
okHttpC.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

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

                 runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show();
                    }
                });

 } });

文件下载

 OkHttpClient okHttpC = new OkHttpClient();
        Request request = new Request.Builder()
                .url("")
                .build();
         okHttpC.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response != null && response.isSuccessful()) {
                    InputStream inputStream = response.body().byteStream();
                    BufferedInputStream bis = new BufferedInputStream(inputStream);
                    FileOutputStream fos = new FileOutputStream(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)  + File.separator +"download2.apk");
                    byte[] data = new byte[10 * 1024];
                    int len;
                    while ((len = bis.read(data)) != -1) {
                        fos.write(data, 0, len);
                    }
                    Log.i("TAG", "保存文件成功");
                    fos.flush();
                    fos.close();
                    bis.close();
                }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值