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

一、OKhttp的最基本使用。

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

1、添加依赖:

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

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

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

1、创建布局文件:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent"
  4. android:orientation="vertical" >
  5. <Button
  6. android:id="@+id/send_request"
  7. android:layout_width="match_parent"
  8. android:layout_height="wrap_content"
  9. android:text="Send Request" />
  10. <ScrollView
  11. android:layout_width="match_parent"
  12. android:layout_height="match_parent" >
  13. <TextView
  14. android:id="@+id/response"
  15. android:layout_width="match_parent"
  16. android:layout_height="wrap_content" />
  17. </ScrollView>
  18. </LinearLayout>

2、主活动中的代码:

  1. public class MainActivity extends Activity implements View.OnClickListener {
  2.  
  3. private Button sendRequest;
  4. private TextView responseText;
  5.  
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.activity_main);
  10. sendRequest = (Button) findViewById(R.id.send_request);
  11. responseText = (TextView) findViewById(R.id.response);
  12. sendRequest.setOnClickListener(this);
  13. }
  14. @Override
  15. public void onClick(View v) {
  16. if (v.getId() == R.id.send_request) {
  17. sendRequestWithOKHttp();
  18. }
  19. }
  20. private void sendRequestWithOKHttp() {
  21. // 开启线程来发起网络请求
  22. new Thread(new Runnable() {
  23. @Override
  24. public void run() {
  25. try {
  26. OkHttpClient client = new OkHttpClient();
  27. Request request = new Request.Builder()
  28. .url("http://www.baidu.com")
  29. .build();
  30. Response response = client.newCall(request).execute();
  31. String responseData = response.body().string();
  32. show(responseData);
  33. } catch (IOException e) {
  34. e.printStackTrace();
  35. }
  36. }
  37. }).start();
  38. }
  39.  
  40. public void show(final String finalDatas){
  41. runOnUiThread(new Runnable() {
  42. @Override
  43. public void run() {
  44. responseText.setText(finalDatas);
  45. }
  46. });
  47. }
  48.  
  49. }

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

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

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

  1. //使用OKhttp,OKhttp给封装好了回调,我们直接使用即可
  2. public static void sendOKHttpRequst(final String address, final okhttp3.Callback callback){
  3. new Thread(new Runnable() {
  4. @Override
  5. public void run() {
  6. OkHttpClient client = new OkHttpClient();
  7. Request request = new Request.Builder()
  8. .url(address)
  9. .build();
  10. client.newCall(request).enqueue(callback);
  11. }
  12. }).start();
  13. }

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

  1. //使用OKhttp工具类
  2. findViewById(R.id.btn_okhttp).setOnClickListener(new View.OnClickListener() {
  3. @Override
  4. public void onClick(View v) {
  5. HttpUtils.sendOKHttpRequst(address, new Callback() {
  6. @Override
  7. public void onFailure(Call call, IOException e) {
  8. //对异常情况处理
  9. Log.e("MainActivity","错误信息是" + e.toString());
  10. }
  11.  
  12. @Override
  13. public void onResponse(Call call, final Response response) throws IOException {
  14. //得到服务器返回的数据response
  15. runOnUiThread(new Runnable() {
  16. @Override
  17. public void run() {
  18. try {
  19. mTextView.setText(response.body().string());
  20. } catch (IOException e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. });
  25. }
  26. });
  27. }
  28. });
  29. }

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

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

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

Android简易实战教程--第四十七话《使用OKhttp回调方式获取网络信息》的更多相关文章

  1. Android简易实战教程--第四十三话《上拉加载与下拉刷新》

    ListView的下拉刷新很常见,很多开源的框架都能做到这个效果,当然也可以自己去实现.本篇案例是基于xlistview的. 布局: <RelativeLayout xmlns:android= ...

  2. Android简易实战教程--第四十话《Spinner》

    对于Spinner控件的介绍和使用方法,可以先看之前写过的一篇博客:Spinner控件详解 本篇就基于这个知识点完成一个简单的小案例: 根据介绍,先写一个布局: <?xml version=&q ...

  3. Android简易实战教程--第三十七话《NotifiCation》

    通知的使用,无疑是Android系统的亮点之一:就连IOS在5.0开始也引入了类似通知的技巧.可见它的实用性. 今天这个小案例,就学习一下通知的基本使用,API是使用最新的API,4.3以前创建通知的 ...

  4. Android简易实战教程--第五十话《动画扫描》

    祝新年快乐!2017(一起)前行. 转载博客请注明出处:道龙的博客 本篇简答的小案例,使用动画知识,完成一个类似雷达扫描效果,并且加入自定义进度条.对于自定义进度条前面有很详细的解析和案例了,本篇就结 ...

  5. Android简易实战教程--第十六话《SharedPreferences保存用户名和密码》

    之前在Android简易实战教程--第七话<在内存中存储用户名和密码> 那里是把用户名和密码保存到了内存中,这一篇把用户名和密码保存至SharedPreferences文件.为了引起误导, ...

  6. Android简易实战教程--第四十二话《Spinner下拉级联效果》

    本篇承接第四十话第四十话<Spinner> 参考博客:http://blog.csdn.net/yayun0516 进入正题: Strings加入第一级数据: <string-arr ...

  7. Android简易实战教程--第四十六话《RecyclerView竖向和横向滚动》

    Android5.X后,引入了RecyclerView,这个控件使用起来非常的方便,不但可以完成listView的效果,而且还可以实现ListView无法实现的效果.当然,在新能方便也做了大大的提高. ...

  8. Android简易实战教程--第四十八话《Android - Timer、TimerTask和Handler实现倒计时》

    之前本专栏文章中的小案例有写到:第三十九话<Chronometer实现倒计时> 以及使用异步实现倒计时:第三十三话< AsyncTask异步倒计时> 本篇文章 结合Timer. ...

  9. Android简易实战教程--第四十九话《满屏拖动的控件》

    今天做个有意思的效果吧,控件的拖拽,简单实用,逻辑清晰点3分钟看完. 说的很高大上,其实就是拖动Button按钮跟着鼠标位置满手机屏幕跑罢了. 直接上简单的代码吧: public class Main ...

随机推荐

  1. Spring Cloud学习笔记-001

    Spring Boot快速入门 1. Eclipse新建maven工程,骨架选择quickstart: 2. 加入springboot的父工程,和web依赖: 3. 编写一个简单的RESTful接口, ...

  2. Git篇(基础)

    安装过程省略... 至于安装目录的有关功能,略过... 一.关于初次使用的关键配置命令: 1.配置基本信息,该信息将保存在该用户目录下的.gitconfig文件内 配置用户信息$ git config ...

  3. 关于OpenAuth.Net被攻击的感想

    距离上次写博客应该是1年多以前的事情了,看过我博客的人都知道,我从来不在博客园发技术无关的贴子,除了上次离职.但这次我是实在忍不住了. 今天我个人开源项目OpenAuth.Net发布了最新版(有兴趣戳 ...

  4. 0418 jQuery笔记(添加事件、each、prop、$(this))

    1.添加点击事件.each.prop.$(this) //全选框的被动操作 //定义一个标志保存最终状态 var flag = false; //为每一个选择框添加点击事件,数组.click() $( ...

  5. 使用 dotnet cli 命令上传 nuget 程序包

    前言 前面写了一篇文章介绍了如何将自己的程序集打包成nuget package并上传到nuget.org,传送门.全部是通过网页端来进行操作的,现在介绍一种比较方便快捷的方法就是用dotnet cli ...

  6. github的简单使用

    查了好多入门教程(图文并茂可以了解一些基本步骤),感觉逻辑欠缺,(很多东西跟着教程了解会用了,不了解逻辑,只是会了这一个,其他的还是很蒙),来一起理一理把 1.第一步下载并注册(这个自己解决) 2.用 ...

  7. [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 ...

  8. [JLOI 2012]树

    Description 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深 ...

  9. ●洛谷P1291 [SHOI2002]百事世界杯之旅

    题链: https://www.luogu.org/recordnew/show/5861351题解: dp,期望 定义dp[i]表示还剩下i个盖子没收集时,期望还需要多少次才能手机完. 初始值:dp ...

  10. UVA - 11997:K Smallest Sums

    多路归并 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> ...