okHttp:

1.okHttp是squere公司出的,在Android4.0以后盛行

2.httpClient 在5.0中弃用,在6.0以Google的sdk中没有该api

3.httpUrlConnection 系统自带的,用的比较频繁

特点:连接效率高,可以异步和同步

需要导入两个jar包:

okhttp-3.0.0-RC1.jar  okio-1.6.0.jar(okhttp内部依赖okio)

  1. package fanggao.qf.okhttptest;
  2.  
  3. import android.os.Bundle;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.util.Log;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.TextView;
  9.  
  10. import java.io.IOException;
  11. import java.io.InputStream;
  12.  
  13. import okhttp3.Callback;
  14. import okhttp3.OkHttpClient;
  15. import okhttp3.Request;
  16. import okhttp3.Response;
  17. import okhttp3.ResponseBody;
  18.  
  19. public class MainActivity extends AppCompatActivity {
  20.  
  21. private TextView textview;
  22. private static final String url = "http://m2.qiushibaike.com/article/list/text?page=1";
  23. @Override
  24. protected void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.activity_main);
  27. Button button = (Button) findViewById(R.id.btn_download);
  28. textview = (TextView) findViewById(R.id.tv_text);
  29. }
  30. /**
  31. * 点击下载数据
  32. * @param view
  33. */
  34. public void onClick(View view){
  35. //同步的方式,需要在子线程中运行,否则报错
  36. /* new Thread(new Runnable() {
  37. @Override
  38. public void run() {
  39. getDataForGet();
  40. }
  41. }).start();*/
  42. //异步 ,不需要开启子线程
  43. getAsyncOkHttp();
  44. }
  45. /**
  46. * 异步:同时执行多个
  47. * 通过get请求获取数据
  48. *
  49. */
  50. private void getAsyncOkHttp() {
  51. OkHttpClient okHttpClient = new OkHttpClient();
  52. Request request = new Request.Builder().get().url(url).build();
  53. //异步:
  54. okHttpClient.newCall(request).enqueue(new Callback() {
  55. @Override
  56. public void onFailure(Request request, IOException e) {
  57. }
  58. @Override
  59. public void onResponse(Response response) throws IOException {
  60. final String string = response.body().String();
  61. Log.i("tag","------"+Thread.currentThread().getId());
  62. //只能在主线程中进行UI操作
  63. //在主线程中进行
  64. runOnUiThread(new Runnable() {
  65. @Override
  66. public void run() {
  67. textview.setText(string);
  68. }
  69. });
  70. }
  71. });
  72. }
  73. /**
  74. * 同步:一次执行一个
  75. * 通过get请求获取数据
  76. */
  77. private void getDataForGet() {
  78. try {
  79. //1.声明okhttp客户端
  80. OkHttpClient okHttpClient = new OkHttpClient();
  81. //2.构造request
  82. //1.声明构造器 ,设置请求方式,设置请求参数
  83. Request request = new Request.Builder().get().url(url).build();
  84. //3.通过客户端执行请求,获得response
  85. Response response = okHttpClient.newCall(request).execute();
  86. //4,判断响应是否成功
  87. if(response.isSuccessful()){
  88. //获得响应实体
  89. ResponseBody body = response.body();
  90. //获得string
  91. final String string = body.string();
  92. //获得bytep[]
  93. byte[] bytes = body.bytes();
  94. //获得流
  95. InputStream inputStream = body.byteStream();
  96. //在主线程中进行
  97. runOnUiThread(new Runnable() {
  98. @Override
  99. public void run() {
  100. textview.setText(string);
  101. }
  102. });
  103. }
  104. Log.i("tag",Thread.currentThread().getName());
  105. } catch (IOException e) {
  106. e.printStackTrace();
  107. }
  108. }
  109. }

现象:

网络请求OkHttp的使用的更多相关文章

  1. Android okHttp网络请求之Json解析

    前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...

  2. Android okHttp网络请求之Get/Post请求

    前言: 之前项目中一直使用的Xutils开源框架,从xutils 2.1.5版本使用到最近的xutils 3.0,使用起来也是蛮方便的,只不过最近想着完善一下app中使用的开源框架,由于Xutils里 ...

  3. Android okHttp网络请求之文件上传下载

    前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...

  4. Android okHttp网络请求之缓存控制Cache-Control

    前言: 前面的学习基本上已经可以完成开发需求了,但是在项目中有时会遇到对请求做个缓存,当没网络的时候优先加载本地缓存,基于这个需求我们来学习一直okHttp的Cache-Control. okHttp ...

  5. Android okHttp网络请求之Retrofit+Okhttp+RxJava组合

    前言: 通过上面的学习,我们不难发现单纯使用okHttp来作为网络库还是多多少少有那么一点点不太方便,而且还需自己来管理接口,对于接口的使用的是哪种请求方式也不能一目了然,出于这个目的接下来学习一下R ...

  6. 网络请求三方库——OkHttp

    我们知道在Android开发中是可以直接使用现成的API进行网络请求的,就是使用 HttpClient 和 HttpURLConnention ,而Android 4.4 之后 HttpClient  ...

  7. 安卓网络请求之——OkHttp学习

    之前做安卓项目的时候,HTTP请求用的是android api中的HttpURLConnection和HttpClient,编码比较繁琐,自己封装的也不好.后来知道有很多网络请求的第三方框架,可以方便 ...

  8. Android常用网络请求框架Volley Retrofit (okHttp)

    Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient.在 Android 5.0 的时候 Google 就不推荐使用 HttpClient ...

  9. Retrofit2+Rxjava+OkHttp的使用和网络请求

    Retrofit2+Rxjava+OkHttp的使用和网络请求 https://blog.csdn.net/huandroid/article/details/79883895 加入Rxjava 如果 ...

随机推荐

  1. POJ 2352 Stars

    题意:有一堆星星,每个星星的级别为坐标不高于它且不在它右边的星星个数,求级别为0-n - 1的星星个数. 解法:树状数组.输入的星星坐标已经按y坐标升序排序,y坐标相等的按x升序排序,所以每输入一个数 ...

  2. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.5.8

    Prove that for any matrices $A,B$ we have $$\bex |\per (AB)|^2\leq \per (AA^*)\cdot \per (B^*B). \ee ...

  3. 《深入Java虚拟机学习笔记》- 第19章 方法的调用与返回

    <深入Java虚拟机学习笔记>- 第19章 方法的调用与返回

  4. create Context Menu in Windows Forms application using C# z

    In this article let us see how to create Context Menu in Windows Forms application using C# Introduc ...

  5. C: Answers to “The C programming language, Edition 2”

    <The C programming language> Edition 2的习题答案地址: http://users.powernet.co.uk/eton/kandr2/index.h ...

  6. Error starting static Resources java.lang.IllegalArgumentException: Document base D:\Program Files\apache-tomcat-xxx\webapps\xxx does not exist or is not a readable directory

    网上的答案大多数如下: 但并没有解决我的问题  经过我的观察: 在tomcat的server.xml有Lottery项目描述,但实际上,该项目已被我删除,不存在于webapps中了    该行Cont ...

  7. jQuery遍历多层json数据

    1.json与jsonp的区别(待查) 2.要遍历的数据如下: {"status": "ok", "code": 200, "da ...

  8. CentOS 6.5 安装配置

    关于CentOS的安装,网上有很多详细的教程.其实重点就在于硬盘的分区和软件的定制这两块.下面我在VirtualBox虚拟机上安装 CentOS-6.5-i386-minimal. 1.在起始菜单处选 ...

  9. Apache Hadoop 源码阅读

    总之一句话,这些都是hadoop-2.2.0的源代码里有的.也就是不光只是懂理论,编程最重要,还是基本功要扎实啊.... 在hadoop-2.2.0的源码里,按Ctrl + Shift + T . 跳 ...

  10. 【C语言】- 数据输出-printf( )和putchar( )

    格式化输出函数printf( ) printf( )功能: 向系统指定输出设备按指定的格式输入任意个任意类型的数据,并返回实际输出的字符数.若出错,将返回负数. printf( )使用形式: prin ...