在之前的小案例中写过一篇使用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精彩案例专栏里面进行细致详细的分析

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

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

  1. Android简易实战教程--第四十四话《ScrollView和HorizontalScrollView简单使用》

    一.ScrollView 由于手机屏幕的高度有限,当普通布局放不下现实和的内容时,ScrollView视图(滚动视图)就会派上用场,因为数据可以往下滚动显示. 二.HorizontalScrollVi ...

  2. Android简易实战教程--第五十四话《视差特效》

    查看更多进阶知识,可以关注我的公众号,微信搜索:Android小菜 这个简易实战教程系列专栏发现已经大半年没更新了啊,赶紧添点东西. 本文实现一个视差特效效果,动态效果如下: 代码十分简单,自定义Vi ...

  3. Android简易实战教程--第二十四话《画画板》

    今天完成一个画画板. 首先来个布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android ...

  4. Android简易实战教程--第九话《短信备份~二》

    这一篇,承接地八话.使用高效的方式备份短信--xml序列化器. 存储短信,要以对象的方式存储.首先创建javabean: package com.itydl.createxml.domain;publ ...

  5. Android简易实战教程--第五话《开发一键锁屏应用》

    转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51860900 点击打开链接 Device Administration 对于这个应 ...

  6. Android简易实战教程--第三十二话《使用Lrucache和NetworkImageView加载图片》

    转载本专栏每一篇博客请注明转载出处地址,尊重原创.此博客转载链接地址:小杨的博客    http://blog.csdn.net/qq_32059827/article/details/5279131 ...

  7. android真实项目教程(四)——MY APP MY STYLE_by_CJJ

    大家下午好...如果在学校,到时间吃晚饭了....隔了好久才重新敲代码...又落后那么多了,要更加努力学习了....今天下午写了下app的第四部分... 这里给下之前三部分的地址,因为如果第一次看,, ...

  8. android 重复解绑服务,Android培训实战教程之多次解绑抛出异常原因

    Android培训实战教程之多次解绑抛出异常原因 更新时间:2015年12月28日14时27分 来源:传智播客Android培训学院 浏览次数: 多次解绑服务(unBindService)抛出异常原因 ...

  9. 视频教程-SEM实战教程(四)-网络营销

    SEM实战教程(四) 毕业于中国人民大学,从事网络营销推广多年,网络营销讲师,有丰富的SEM.微博微信营销培训经验,多年的网络营销实战派研究者,操作过医疗集团.出国留学.教育培训等推广项目,现专注SE ...

最新文章

  1. tensorflow tensor 张量 部分采样 切片和索引
  2. js判断是否在iframe和禁止网页在iframe中显示
  3. mysql 取消主从复制_MySQL:第一次看到有人把MySQL主从复制讲解的这么清楚
  4. 本月与上月对比数据叫什么_财务人事应会Excel数据对比Vlookup函数快速核定变动...
  5. 阶段1 语言基础+高级_1-3-Java语言高级_02-继承与多态_第1节 继承_7_继承中方法的覆盖重写_注意事项...
  6. linux截图快捷键
  7. 宜搭功能更新:子表全面升级,高级流程可以批量审批
  8. oracle虚拟用户是什么意思,lr脚本中oracle 2tier虚拟用户相关内容
  9. VS2008 开发设计MOSS工作流 URN 注意了
  10. QT5 获取窗口、系统屏幕大小尺寸信息,Qt 获取控件位置坐标,屏幕坐标,相对父窗体坐标
  11. 那一种笔记软件更好用_制作更好的面向用户软件的7种方法
  12. 滴滴定制网约车D1即将登陆长沙 市民12月中可叫到
  13. Codeforces Round #468 (Div. 2): D. Peculiar apple-tree(水题)
  14. 变量 重复声明_JS:定义变量的var、let有何操作?(360°无死角)
  15. Wwise + GME游戏语音方案:解锁更多语音玩法,让玩家“声临其境”
  16. html5动漫人物小部件制作,虚拟动漫人物制作器app
  17. (产品面试贴)乐动——阿里巴巴2015暑期实习平台型产品经理(技术领域)
  18. 触发器referencing old as old new as new
  19. 不安装office的情况下如何实现对excel的导入导出
  20. 傅里叶级数 三角形式 到 复数形式

热门文章

  1. Android插件化原理解析——Hook机制之Binder Hook
  2. Android实战技术:深入理解Android的RPC方式与AIDL
  3. The new NDK support in Android Studio 1.3
  4. tensorflow命令行安装失败_2019-1 强化学习入坑记之ancanda安装
  5. matlab 交叉验证 代码,交叉验证(Cross Validation)方法思想简介
  6. 原python基础概念整理_Python从头学之基础概念整理
  7. linux中查找某一个字符串,Linux系统下,在文件中查找某个字符串
  8. QML编程之旅 之可视元素
  9. 2022.2.21显示器连接器引脚信号定义1
  10. ansys fluent udf manual 下载_Fluent内置流固耦合01 使用流程