Android okhttp3的使用详解

现在越来越多的项目中使用到了okhttp,今天我就来带大家学习学习!!!

1.添加依赖

这是3的依赖,和3之前的方法使用有区别;
compile 'com.squareup.okhttp3:okhttp:3.0.1'
compile 'com.squareup.okhttp3:logging-interceptor:3.0.1'

2.设置缓存

工具类OkUtils:
public static OkHttpClient getOkHttpClient (Activity activity) {

        File file = new File(activity.getCacheDir(), "xianzaishi");
        Cache cache = new Cache(file, 15 * 1024 * 1024);

        OkHttpClient client = new OkHttpClient.Builder().cache(cache)
                .connectTimeout(5, TimeUnit.SECONDS)
                .readTimeout(5, TimeUnit.SECONDS)
                .writeTimeout(5, TimeUnit.SECONDS)
                .addInterceptor(new HttpLoggingInterceptor())
                .retryOnConnectionFailure(true)
                .build();
    }

3.get异步请求方式

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

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

            }

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

            }
        });

4.get同步请求

Request request = new Request.Builder().get().url("url").build();
 try {
            Response response = client.newCall(request).execute();
            if (response.isSuccessful()) {//实质是判断返回码是不是在200300之间
                String string = response.body().string();//可以转为字符串json
//            byte[] bytes = response.body().bytes();//可以转为字节数组
//            InputStream inputStream = response.body().byteStream();//可以转为输入流
                //看得出回调子线程,你可以写一个工具类将结果运行在UI线程就可了
            }



        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(activity,"请求失败",Toast.LENGTH_LONG).show();
        }

5.post异步请求

很简单
Request request = new Request.Builder().get().url("url").build();把get里面的get变为post(RequestBody)就可以了

FormBody formoody = new FormBody.Builder()
               .add("uid", "10025")
                .add("pageSize", "10")
                .add("curPage", "0")
                .add("status", "0")
                .build();

note:FormBody 是RequestBody的子类;

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

                UiUtils.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mListener.onFail();
                    }
                });

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String string = response.body().string();
                //这是我自己写的工具类,不是系统的,么么哒
                UiUtils.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {

                    }
                });

            }
        });
仔细看下,和get没多大区别;

6.post同步请求

//前面的代码和异步的一样
try {
            Response response = okHttpClient.newCall(request).execute();
            boolean successful = response.isSuccessful();
            if (successful) {
                String string = response.body().string();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

7.提交file

 public static final MediaType MEDIA_TYPE_MARKDOWN
                = MediaType.parse("text/x-markdown; charset=utf-8");

        Request request = new Request.Builder()
                .url("https://api.github.com/markdown/raw")
                .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, file))//这个file就是我们要提交的
                .build();

//使用同步
try {
            Response response = okHttpClient.newCall(request).execute();
            boolean successful = response.isSuccessful();
            if (successful) {
                String string = response.body().string();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

未完待续!!!下集更精彩!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值