OkHttp的学习(一)

OkHttp

1、简单的使用

 //创建OkHhttpClient对象
        OkHttpClient okHttpClient=new OkHttpClient();

        //创建一个Request对象
        final Request request=new Request.Builder()
                .url("http://www.tuling123.com/openapi/api?key=2772e31c6644959967936b6cc14a60&&info=%E8%AE%B2%E4%B8%AA%E7%AC%91%E8%AF%9D")
                .build();

        //通过okHttpClient新建一个Call对象
        //传入一个request对象
        //it cannot be executed twice.
        final Call call=okHttpClient.newCall(request);

        //请求加入任务调度
        call.enqueue(
                new Callback() {
                    @Override
                    public void onFailure(Request request, IOException e) {

                    }

                    @Override
                    public void onResponse(Response response) throws IOException {
                        //将获取到的数据转换成字符串
                        final String msg =  response.body().string();

                        runOnUiThread(
                                new Runnable() {
                                    @Override
                                    public void run() {
                                        tvData.setText(msg);
                                    }
                                }
                        );
                    }
                }
        );
Ok,到这里我们还只是简单地使用了,感觉确实是比HttpUrlConnection使用起来要简单。

首先创建一个OkHttpClient对象。

再创建一个Request对象,在创建request的时候,传入url,同时可以设置方法等。

再通过OkHttpClient对象传入一个request参数创建一个Call对象

这里的API我删掉了几个字母,挺有意思的一个API,大家可以去注册一个,图灵机器人,百度一下就可以知道,请求的时候Info后面只要带上任意,就能返回一些数据,智能聊天机器人一样。上面是异步的方式去执行,当然也支持阻塞的方式,下面写下阻塞方式的。

new Thread(
                new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Response response=call.execute();
                            final String msg=response.body().string();
                            runOnUiThread(
                                    new Runnable() {
                                        @Override
                                        public void run() {
                                            tvData.setText(msg);
                                        }
                                    }
                            );
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
        ).start();

因为不能在主线程里面进行网络操作,所以只能通过开启一个子线程去执行。我是这样理解阻塞和非阻塞的,阻塞就是,有一个任务,你要完成它才能去做其他的事情,不管等待的时间有多长,而非阻塞就是没完成的时候可以先去做别的事,比如你煮饭的时候,可以把饭煮在一边然后去玩把游戏,等到饭熟了你再出来吃饭。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值