博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android网络开发之OkHttp--基本用法GET
阅读量:5926 次
发布时间:2019-06-19

本文共 3220 字,大约阅读时间需要 10 分钟。

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、访问网络不能在主线程中进行,还有不要忘记加入访问网络的权限。

7、参考博文:

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

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

你可能感兴趣的文章
Spring高级应用之注入各类集合
查看>>
VS2010下的多线程窗口
查看>>
OC之非ARC环境下循环retain问题
查看>>
WWDC 2013 Session笔记 - Xcode5和ObjC新特性
查看>>
十五天精通WCF——第十一天 如何对wcf进行全程监控
查看>>
Cocoapods的安装和使用
查看>>
【LINUX学习】链接文件
查看>>
权威解读 | 人类社会正进入DT时代 如何激活生产力?
查看>>
【Mongodb】用户和认证 权限总结
查看>>
-bash: ulimit: pipe size: cannot modify limit: Invalid argument
查看>>
12篇学通C#网络编程——第一篇 基础之进程线程
查看>>
(三)java的数据类型
查看>>
Codeforces Round #323 (Div. 2) C.GCD Table
查看>>
MySQL账户安全设置
查看>>
用GCD线程组与GCD信号量将异步线程转换为同步线程
查看>>
正则表达式
查看>>
java序列化和反序列化
查看>>
【自定义标签开发】01-标签简介和开发第一个标签
查看>>
3D版的TagView,效果很赞
查看>>
[LeetCode]119.Pascal&#39;s Triangle II
查看>>