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)

package fanggao.qf.okhttptest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; import java.io.IOException;
import java.io.InputStream; import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody; public class MainActivity extends AppCompatActivity { private TextView textview;
private static final String url = "http://m2.qiushibaike.com/article/list/text?page=1";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.btn_download);
textview = (TextView) findViewById(R.id.tv_text);
}
/**
* 点击下载数据
* @param view
*/
public void onClick(View view){
//同步的方式,需要在子线程中运行,否则报错
/* new Thread(new Runnable() {
@Override
public void run() {
getDataForGet();
}
}).start();*/
//异步 ,不需要开启子线程
getAsyncOkHttp();
}
/**
* 异步:同时执行多个
* 通过get请求获取数据
*
*/
private void getAsyncOkHttp() {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().get().url(url).build();
//异步:
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
final String string = response.body().String();
Log.i("tag","------"+Thread.currentThread().getId());
//只能在主线程中进行UI操作
//在主线程中进行
runOnUiThread(new Runnable() {
@Override
public void run() {
textview.setText(string);
}
});
}
});
}
/**
* 同步:一次执行一个
* 通过get请求获取数据
*/
private void getDataForGet() {
try {
//1.声明okhttp客户端
OkHttpClient okHttpClient = new OkHttpClient();
//2.构造request
//1.声明构造器 ,设置请求方式,设置请求参数
Request request = new Request.Builder().get().url(url).build();
//3.通过客户端执行请求,获得response
Response response = okHttpClient.newCall(request).execute();
//4,判断响应是否成功
if(response.isSuccessful()){
//获得响应实体
ResponseBody body = response.body();
//获得string
final String string = body.string();
//获得bytep[]
byte[] bytes = body.bytes();
//获得流
InputStream inputStream = body.byteStream();
//在主线程中进行
runOnUiThread(new Runnable() {
@Override
public void run() {
textview.setText(string);
}
});
}
Log.i("tag",Thread.currentThread().getName());
} catch (IOException e) {
e.printStackTrace();
}
}
}

现象:

网络请求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. Oracle函数面试题

    1.对字符串操作的函数? 答:ASCII() –函数返回字符表达式最左端字符的ASCII 码值 CHR() –函数用于将ASCII 码转换为字符 –如果没有输入0 ~ 255 之间的ASCII 码值C ...

  2. tdx api z

    调用TdxAPI.dll函数 .DLL命令 TdxInit, 逻辑型, "TdxApi.dll", "TdxInit", , 初始化通达信实例,成功时返回tru ...

  3. 求大于整数m且紧靠m的k个素数 及 判断一个数是否为素数的方法

    题目: 请编写一个函数void fun(int m,int k ,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中. 例如,若输入:17,5,则应输出:19,23 ...

  4. HDU 5534 Partial Tree 完全背包

    一棵树一共有2*(n-1)度,现在的任务就是将这些度分配到n个节点,使这n个节点的权值和最大. 思路:因为这是一棵树,所以每个节点的度数都是大于1的,所以事先给每个节点分配一度,答案 ans=f[1] ...

  5. 转:eclipse导入工程中文乱码问题

    eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的.一般默认都是UTF-8或者GBK,当从外部导入的一个工程时,如果该工程的编码方式与eclipse中设置的编码方式不同 ...

  6. eclipse+xdebug

    root@leeyoung-Satellite-M300:/etc/apache2/sites-available# nano 000-default.conf <IfModule dir_mo ...

  7. Java HashMap实例源码分析

    引言 HashMap在键值对存储中被经常使用,那么它到底是如何实现键值存储的呢? 一 Entry Entry是Map接口中的一个内部接口,它是实现键值对存储关键.在HashMap中,有Entry的实现 ...

  8. 问题-Tbutton(sender) 与 (sender as Tbutton) 等价吗?

    问题:Tbutton(sender) 与 (sender as Tbutton) 等价吗?  答:  1. Sender As TButton时delphi做类型检查. 比如: var frm:TFo ...

  9. hdoj 5194 DZY Loves Balls【规律&&gcd】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5194 题意:给你n个黑球,m个白球,每次从中随机抽取一个,如果抽到黑球记为1如果抽出来白球记为0,让你 ...

  10. 高效使用Bitmaps(二) 后台加载Bitmap

    转载:http://my.oschina.net/rengwuxian/blog/183802 为什么要在后台加载Bitmap? 有没有过这种体验:你在Android手机上打开了一个带有含图片的Lis ...