OkHttp的使用分析,okhttp的多种getpost方式

Okhttp的使用其实相对比较简单,它的使用方法整理以下只有4步:

1,创建client对象,

2,创建请求对象

3,获取call对象

4,回调数据

当然,根据不同的需求会增加不同的步骤,但是离不开着基本的四部,不废话,直接上代码:


本文通过四个例子描述了四张常用的get,post请求方式:



直接上干货,注释相信已经非常的详细了:

 //普通的get请求,得到网址直接获取数据,相对简单
    private void nomalOkHttpGet() {
        //创建client对象
        OkHttpClient okHttpClient = new OkHttpClient();
        //创建请求对象
        Request request = new Request.Builder().url("此处填写url").build();
        //通过上边的requsrt作为参数得到call,对象,接下来就是通过回调进行数据获取
        Call call = okHttpClient.newCall(request);
        //通过异步的方式
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
//得到的数据在respnse中存储,有以下几种返回方式,需呀哪一张就可以使用哪一种,还有更多,这里只是例举
                //返回字节数组
                byte[] bytes = response.body().bytes();
                //返回字节流
                InputStream inputStream = response.body().byteStream();
                //返回字符流
                Reader reader = response.body().charStream();
                //返回内容长度
                long l = response.body().contentLength();
                //返回内容类型
                MediaType mediaType = response.body().contentType();
                //返回字符串
                String string = response.body().string();


            }
        });


        try {
//            同步的方法,选择其中一个即可,如果是同步,需要创建子线程进行此操作
            call.execute();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    //含有请求头的get请求,需要增加异步添加请球头的操作
    private void haveHeaderOktHttpGet() {
        OkHttpClient okHttpClient = new OkHttpClient();
//        创建请求,添加请求头,url可以携带参数,当然也可不携带,这里只是重点说带有请求头的请求
        Request request = new Request.Builder().addHeader("name", "values").url("网址可以携带参数").build();
//        得到call对象
        Call call = okHttpClient.newCall(request);
        //回调数据
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

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

            }
        });

    }

    //带有文件和参数混合的post请求,
    private void fileAndParamOkhttppost() {
        OkHttpClient okHttpClient = new OkHttpClient();
        //创建带有文件的文件体,tempFile为你要提交的文件
        RequestBody fileBody = RequestBody.create(MediaType.parse("text/plain; charset=utf-8"), tempFile);
        //创建请求体,设置请求体类型是混合类型的,然后将文件和参数等回合数据加入,
        RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("参数名", "参数").addFormDataPart("参数名", "参数").addFormDataPart("参数类型", "文件类型", fileBody).build();
        //创建请求对象,发起请求,
        Request request = new Request.Builder().url("url").post(requestBody).addHeader("请求头名", "请求头参数").build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

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

            }
        });


    }
//一个普通的post请求,携带表单上传
    private void narmalOkHttpPost() {
        OkHttpClient okHttpClient = new OkHttpClient();
        //创建带有参数的请求体对象
        RequestBody requestBody = new FormBody.Builder().add("参数名", "参数").add("参数名", "参数").build();
        //将请求体放入到请求中,后边的同前边一样过程一致
        Request request = new Request.Builder().url("url").post(requestBody).addHeader("请求头名", "请求头参数").build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

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

            }
        });
    }



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值