当前位置: 首页 > news >正文

Android网络开发之OkHttp--基本用法GET

1、OkHttp框架使用了OkIo.jar包,不要忘记添加。

2、对于Request对象是如何实例化的,大家可以参考--java builder设计模式

http://www.cnblogs.com/moonz-wu/archive/2011/01/11/1932473.html

3、通过同步GET访问网络,主要分为四步:

     (1)、声明并实例化一个OkHttpClient对象。

     (2)、声明并实例化一个Request对象,并设置URL等参数。

     (3)、执行Request请求,并获得一个Response对象。

     (4)、根据Response的isSuccessful()方法,判断是否成功,然后从Response对象中获取返回数据。

4、通过异步GET访问网络和同步GET是一样的,不过处理返回数据实在CallBack接口中实现的。

5、

public class GetActivity extends Activity {
    private final OkHttpClient client = new OkHttpClient();

    private TextView mTvGet;

    private String result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_get);

        initView();

        new Thread(getThread).start();
    }

    public void initView() {
        mTvGet = (TextView) findViewById(R.id.tv_get_show);
    }

    private Runnable getThread = new Runnable() {
        public void run() {
            try {
                getRun2();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        };
    };

    /** 同步GET */
    public void getRun() throws Exception {
        // 实例化请求对象
        Request request = new Request.Builder().url("https://www.baidu.com/").build();
        // 得到返回对象
        Response response = client.newCall(request).execute();

        // 判断返回对象是否成功
        if (!response.isSuccessful()) {
            result += "请求出错!";
        } else {
            // 输出Headers
            Headers responseHeaders = response.headers();
            for (int i = 0; i < responseHeaders.size(); i++) {
                result += responseHeaders.name(i) + "" + responseHeaders.value(i);
            }
            // 输出Body
            result += response.body().string();
        }

        getHandler.sendEmptyMessage(0);
    }

    /** 异步GET */
    public void getRun1() throws Exception {
        Request request = new Request.Builder().url("https://www.baidu.com/").build();
        client.newCall(request).enqueue(new Callback() {

            @Override
            public void onResponse(Response response) throws IOException {
                // 判断返回对象是否成功
                if (!response.isSuccessful()) {
                    result += "请求出错!";
                } else {
                    // 输出Headers
                    Headers responseHeaders = response.headers();
                    for (int i = 0; i < responseHeaders.size(); i++) {
                        result += responseHeaders.name(i) + "" + responseHeaders.value(i);
                    }
                    // 输出Body
                    result += response.body().string();
                }

                getHandler.sendEmptyMessage(0);
            }

            @Override
            public void onFailure(Request arg0, IOException e) {
                // TODO Auto-generated method stub
                e.printStackTrace();
            }
        });
    }

    private Handler getHandler = new Handler() {
        public void handleMessage(Message msg) {
            mTvGet.setText(result);
        };
    };
}

6、访问网络不能在主线程中进行,还有不要忘记加入访问网络的权限。

<uses-permission android:name="android.permission.INTERNET" />

7、参考博文:

http://www.2cto.com/kf/201505/397557.html

转载于:https://www.cnblogs.com/begin1949/p/4927494.html

相关文章:

  • 查看Android应用包名package和入口activity名称
  • ueditor 最新版本【1.4.3.1】单独文件/图片上传处理方法
  • 【原创】sizeof运算符总结
  • Android客户端性能测试常见指标及测试方法--转载
  • composer 报错笔记
  • ubuntu集群下ssh配置总结
  • 使用css3属性,大部分浏览器要识别前缀
  • 暴搜 - Codeforces Round #327 (Div. 2) E. Three States
  • iOS中正确的截屏姿势
  • Android Volley框架的使用(三)
  • IP工具类-自己动手做个ip解析器
  • CSS3 变换
  • 前端之React实战:创建跨平台的项目架构
  • 驱动的加载与卸载例程(C++/C)
  • 寻找
  • ➹使用webpack配置多页面应用(MPA)
  • bearychat的java client
  • Django 博客开发教程 16 - 统计文章阅读量
  • echarts的各种常用效果展示
  • isset在php5.6-和php7.0+的一些差异
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • JS字符串转数字方法总结
  • linux安装openssl、swoole等扩展的具体步骤
  • webpack+react项目初体验——记录我的webpack环境配置
  • 番外篇1:在Windows环境下安装JDK
  • 翻译--Thinking in React
  • 分布式事物理论与实践
  • 线上 python http server profile 实践
  • 用quicker-worker.js轻松跑一个大数据遍历
  • FaaS 的简单实践
  • Spring第一个helloWorld
  • ​如何在iOS手机上查看应用日志
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #Spring-boot高级
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • $.ajax()
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (接口封装)
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)SpringBoot3---尚硅谷总结
  • (转)Google的Objective-C编码规范
  • (转)http-server应用
  • (转)Windows2003安全设置/维护
  • (转)用.Net的File控件上传文件的解决方案
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • ***检测工具之RKHunter AIDE
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .a文件和.so文件
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET Micro Framework初体验(二)
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET多线程执行函数