Android简易实战教程--第四十七话《使用OKhttp回调方式获取网络信息》
在之前的小案例中写过一篇使用HttpUrlConnection获取网络数据的例子。在OKhttp盛行的时代,当然要学会怎么使用它,本篇就对其基本使用做一个介绍,然后再使用它的接口回调的方式获取相同的数据。因为它封装的很好了,并不需要我们去做封装,只需要写少量的代码就可以获取到复杂的网络数据了。
一、OKhttp的最基本使用。
还是直接使用代码来说话:
1、添加依赖:
Github网址:https://github.com/square/okhttp
- compile 'com.squareup.okhttp3:okhttp:3.5.0'
2、等待构建成功后:在主活动中直接使用它的API
1、创建布局文件:
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <Button
- android:id="@+id/send_request"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="Send Request" />
- <ScrollView
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- <TextView
- android:id="@+id/response"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
- </ScrollView>
- </LinearLayout>
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精彩案例专栏里面进行细致详细的分析
Android简易实战教程--第四十七话《使用OKhttp回调方式获取网络信息》的更多相关文章
- Android简易实战教程--第四十三话《上拉加载与下拉刷新》
ListView的下拉刷新很常见,很多开源的框架都能做到这个效果,当然也可以自己去实现.本篇案例是基于xlistview的. 布局: <RelativeLayout xmlns:android= ...
- Android简易实战教程--第四十话《Spinner》
对于Spinner控件的介绍和使用方法,可以先看之前写过的一篇博客:Spinner控件详解 本篇就基于这个知识点完成一个简单的小案例: 根据介绍,先写一个布局: <?xml version=&q ...
- Android简易实战教程--第三十七话《NotifiCation》
通知的使用,无疑是Android系统的亮点之一:就连IOS在5.0开始也引入了类似通知的技巧.可见它的实用性. 今天这个小案例,就学习一下通知的基本使用,API是使用最新的API,4.3以前创建通知的 ...
- Android简易实战教程--第五十话《动画扫描》
祝新年快乐!2017(一起)前行. 转载博客请注明出处:道龙的博客 本篇简答的小案例,使用动画知识,完成一个类似雷达扫描效果,并且加入自定义进度条.对于自定义进度条前面有很详细的解析和案例了,本篇就结 ...
- Android简易实战教程--第十六话《SharedPreferences保存用户名和密码》
之前在Android简易实战教程--第七话<在内存中存储用户名和密码> 那里是把用户名和密码保存到了内存中,这一篇把用户名和密码保存至SharedPreferences文件.为了引起误导, ...
- Android简易实战教程--第四十二话《Spinner下拉级联效果》
本篇承接第四十话第四十话<Spinner> 参考博客:http://blog.csdn.net/yayun0516 进入正题: Strings加入第一级数据: <string-arr ...
- Android简易实战教程--第四十六话《RecyclerView竖向和横向滚动》
Android5.X后,引入了RecyclerView,这个控件使用起来非常的方便,不但可以完成listView的效果,而且还可以实现ListView无法实现的效果.当然,在新能方便也做了大大的提高. ...
- Android简易实战教程--第四十八话《Android - Timer、TimerTask和Handler实现倒计时》
之前本专栏文章中的小案例有写到:第三十九话<Chronometer实现倒计时> 以及使用异步实现倒计时:第三十三话< AsyncTask异步倒计时> 本篇文章 结合Timer. ...
- Android简易实战教程--第四十九话《满屏拖动的控件》
今天做个有意思的效果吧,控件的拖拽,简单实用,逻辑清晰点3分钟看完. 说的很高大上,其实就是拖动Button按钮跟着鼠标位置满手机屏幕跑罢了. 直接上简单的代码吧: public class Main ...
随机推荐
- Spring Cloud学习笔记-001
Spring Boot快速入门 1. Eclipse新建maven工程,骨架选择quickstart: 2. 加入springboot的父工程,和web依赖: 3. 编写一个简单的RESTful接口, ...
- Git篇(基础)
安装过程省略... 至于安装目录的有关功能,略过... 一.关于初次使用的关键配置命令: 1.配置基本信息,该信息将保存在该用户目录下的.gitconfig文件内 配置用户信息$ git config ...
- 关于OpenAuth.Net被攻击的感想
距离上次写博客应该是1年多以前的事情了,看过我博客的人都知道,我从来不在博客园发技术无关的贴子,除了上次离职.但这次我是实在忍不住了. 今天我个人开源项目OpenAuth.Net发布了最新版(有兴趣戳 ...
- 0418 jQuery笔记(添加事件、each、prop、$(this))
1.添加点击事件.each.prop.$(this) //全选框的被动操作 //定义一个标志保存最终状态 var flag = false; //为每一个选择框添加点击事件,数组.click() $( ...
- 使用 dotnet cli 命令上传 nuget 程序包
前言 前面写了一篇文章介绍了如何将自己的程序集打包成nuget package并上传到nuget.org,传送门.全部是通过网页端来进行操作的,现在介绍一种比较方便快捷的方法就是用dotnet cli ...
- github的简单使用
查了好多入门教程(图文并茂可以了解一些基本步骤),感觉逻辑欠缺,(很多东西跟着教程了解会用了,不了解逻辑,只是会了这一个,其他的还是很蒙),来一起理一理把 1.第一步下载并注册(这个自己解决) 2.用 ...
- [Codeforces 863E]Turn Off The TV
Description Luba needs your help again! Luba has n TV sets. She knows that i-th TV set will be worki ...
- [JLOI 2012]树
Description 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深 ...
- ●洛谷P1291 [SHOI2002]百事世界杯之旅
题链: https://www.luogu.org/recordnew/show/5861351题解: dp,期望 定义dp[i]表示还剩下i个盖子没收集时,期望还需要多少次才能手机完. 初始值:dp ...
- UVA - 11997:K Smallest Sums
多路归并 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> ...