博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android简易实战教程--第四十七话《使用OKhttp回调方式获取网络信息》
阅读量:5277 次
发布时间:2019-06-14

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

在之前的小案例中写过一篇使用HttpUrlConnection获取网络数据的例子。在OKhttp盛行的时代,当然要学会怎么使用它,本篇就对其基本使用做一个介绍,然后再使用它的接口回调的方式获取相同的数据。因为它封装的很好了,并不需要我们去做封装,只需要写少量的代码就可以获取到复杂的网络数据了。

一、OKhttp的最基本使用。

还是直接使用代码来说话:

1、添加依赖:

Github网址:https://github.com/square/okhttp

compile 'com.squareup.okhttp3:okhttp:3.5.0'

2、等待构建成功后:在主活动中直接使用它的API

1、创建布局文件:

2、主活动中的代码:

public class MainActivity extends Activity implements View.OnClickListener {    private Button sendRequest;    private TextView responseText;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        sendRequest = (Button) findViewById(R.id.send_request);        responseText = (TextView) findViewById(R.id.response);        sendRequest.setOnClickListener(this);    }    @Override    public void onClick(View v) {        if (v.getId() == R.id.send_request) {            sendRequestWithOKHttp();        }    }    private void sendRequestWithOKHttp() {        // 开启线程来发起网络请求        new Thread(new Runnable() {            @Override            public void run() {                try {                    OkHttpClient client = new OkHttpClient();                    Request request = new Request.Builder()                            .url("http://www.baidu.com")                            .build();                    Response response = client.newCall(request).execute();                    String responseData = response.body().string();                    show(responseData);                } catch (IOException e) {                    e.printStackTrace();                }            }        }).start();    }    public void show(final String finalDatas){        runOnUiThread(new Runnable() {           @Override            public void run() {               responseText.setText(finalDatas);            }        });    }}

这样我们就成功获取到了网络的数据,运行程序我们可以看到:

二、使用OKhttp提供的接口回调

1、定义一个HttpUtils类。加入如下静态方法:

//使用OKhttp,OKhttp给封装好了回调,我们直接使用即可public static void sendOKHttpRequst(final String address, final okhttp3.Callback callback){    new Thread(new Runnable() {        @Override        public void run() {            OkHttpClient client = new OkHttpClient();            Request request = new Request.Builder()                    .url(address)                    .build();            client.newCall(request).enqueue(callback);        }    }).start();}

2、使用工具类,使用回调方法

//使用OKhttp工具类    findViewById(R.id.btn_okhttp).setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            HttpUtils.sendOKHttpRequst(address, new Callback() {                @Override                public void onFailure(Call call, IOException e) {                    //对异常情况处理                    Log.e("MainActivity","错误信息是" + e.toString());                }                @Override                public void onResponse(Call call, final Response response) throws IOException {                    //得到服务器返回的数据response                    runOnUiThread(new Runnable() {                        @Override                        public void run() {                            try {                                mTextView.setText(response.body().string());                            } catch (IOException e) {                                e.printStackTrace();                            }                        }                    });                }            });        }    });}

这里只需要给出主活动的代码即可~,因为封装的太好,我们只需要几行代码就可以完成功能。还需要注意的是,谷歌工程师给封装业务逻辑是在子线程执行的,因此我们要更新数据要在主线程执行。运行程序接口是一样的~

喜欢我的朋友可以关注我,本专栏不定期更新简单有趣的安卓小文~

对于OKHttp更高级的用法,以后会在Android Studio精彩案例专栏里面进行细致详细的分析

转载于:https://www.cnblogs.com/wanghang/p/6299475.html

你可能感兴趣的文章
Centos添加其他yum源
查看>>
SimpleAdapter的用法
查看>>
hql刪除語句,根據參數刪除
查看>>
文件的递归与删除
查看>>
枚举类型和各种类型之间转换
查看>>
sqlserver的四种分页方式
查看>>
Thinking in java 笔记一
查看>>
SPHINX 文档写作工具安装简要指南 - windows 版 - 基于python
查看>>
剖析Hadoop和Spark的Shuffle过程差异(一)
查看>>
pom.xml增加依赖
查看>>
寻找道路(codevs 3731)题解
查看>>
Ubuntu系统安装(win7双系统)
查看>>
字典数组 区别
查看>>
vue中什么样的数据可以是在视图中显示
查看>>
es6解构赋值的高级技巧
查看>>
最小生成树
查看>>
剑指offer(19)顺时针打印矩阵
查看>>
5.28 模拟赛
查看>>
BZOJ 2049: [Sdoi2008]Cave 洞穴勘测
查看>>
【题解】Luogu P3674 小清新人渣的本愿
查看>>