Android中okhttp的使用

框架下载地址:https://github.com/square/okhttp

今天给大家讲解下网络框架okhttp的使用,这个框架非常强大,很多框架都用它来加载网络资源,目前很多开发者还在用AsyncHttp,这个库现在已经不推荐使用了,Google已经去掉了httpclient,下面我们就看一下okhttp的使用。

首先在build.gradle文件中,添加库并同步,如果是eclipse用户就要下载jar包导入libs即可

compile ‘com.squareup.okhttp3:okhttp:3.4.1‘

OkHttpClient httpClient = new OkHttpClient();

Request request = new Request.Builder().url(weather_url).build();

new Thread(){

@Override

public void run() {

super.run();

try {

Response response = httpClient.newCall(request).execute();

final String body = response.body().string();

runOnUiThread(new Runnable() {

@Override

public void run() {

setView(body);

}

});

} catch (IOException e) {

e.printStackTrace();

}

}

}.start();

基本使用还是比较简洁的

//实例一个okhttp对象

//建造一个请求参数,这里可以构造url,head,method等等各种请求参数的设置

//get和post也是在这里体现的,以上为get请求,默认为null,大家都懂得,看源码

public Builder get() {

return method("GET", null);

}

注意这里需要开启线程发送请求,返回response,然后需要在主线程更新UI

还可以使用回调call这样请求,但是要注意,这里仅仅是子线程异步的回调,也就是说更新UI依然要用Handler或者使用runOnUiThread方法。

httpClient.newCall(request).enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

}

@Override

public void onResponse(Call call, Response response) throws IOException {

final String body = response.body().string();

runOnUiThread(new Runnable() {

@Override

public void run() {

setView(body);

}

});

}

});

以上为get请求的使用,如果是post请求,携带参数,仅仅是request构造不同而已,其它一样,下面是方法:

FormBody.Builder builder = new FormBody.Builder();

builder.add("username","dongcai");

builder.add("e_mail","[email protected]");

FormBody build = builder.build();

final Request request = new Request.Builder().url(weather_url).post(build).build();

这里要说明的是,post要的参数是RequestBody,这是个抽象类,里面封装支持各种数据表单等,非常强大。我们找到它的实现子类

public final class FormBody extends RequestBody

FormBody 这里封装了请求参数集合的方法,需要使用Builder类来添加请求参数,然后构造FormBody对象,发送post请求。在这里还可以设置编码方式

public Builder add(String name, String value) {

names.add(HttpUrl.canonicalize(name, FORM_ENCODE_SET, false, false, true, true));

values.add(HttpUrl.canonicalize(value, FORM_ENCODE_SET, false, false, true, true));

return this;

}

public Builder addEncoded(String name, String value) {

names.add(HttpUrl.canonicalize(name, FORM_ENCODE_SET, true, false, true, true));

values.add(HttpUrl.canonicalize(value, FORM_ENCODE_SET, true, false, true, true));

return this;

}

以上是本人参考文档和源码总结下基本的使用方法,相对于AsyncHttp、volley,恐怕最大的不足就是更新UI,okhttp不太方便,消息回来需要自己写主线程。但是okhttp支持SPDY, 可以合并多个到同一个主机的请,使用连接池技术减少请求的延迟(如果SPDY是可用的话) ,使用GZIP压缩减少传输的数据量,缓存响应避免重复的网络请求、拦截器等等。

时间: 2024-08-11 07:44:44

Android中okhttp的使用的相关文章

Android 中OKHttp请求数据get和post

1:在Android Studio 的 build.gradle下  添加 然后再同步一下 compile 'com.squareup.okhttp:okhttp:2.4.0'compile 'com.squareup.okio:okio:1.5.0'compile 'junit:junit:4.12' 如:黄色部分 dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:

Android中HttpURLConnection使用详解

认识Http协议 Android中发送http网络请求是很常见的,要有GET请求和POST请求.一个完整的http请求需要经历两个过程:客户端发送请求到服务器,然后服务器将结果返回给客户端,如下图所示: 客户端->服务器 客户端向服务器发送请求主要包含以下信息:请求的Url地址.请求头以及可选的请求体,打开百度首页,客户端向服务器发送的信息如下所示: 请求URL(Request URL) 上图中的Request URL就是请求的Url地址,即https://www.baidu.com,该Url没

深入了解Android中的AsyncTask

AsyncTask,即异步任务,是Android给我们提供的一个处理异步任务的类.通过此类,可以实现UI线程和后台线程进行通讯,后台线程执行异步任务,并把结果返回给UI线程.  我们知道,Android中只有UI线程,也就是主线程才能进行对UI的更新操作,而其他线程是不能直接操作UI的.这样的好处是保证了UI的稳定性和准确性,避免多个线程同时对UI进行操作而造成UI的混乱.  但Android是一个多线程的操作系统,我们总不能把所有的任务都放在主线程中进行实现,比如网络操作,文件读取等耗时操作,

理解Android中的注解与反射

前言 最近一段时间在研究EventBus和Retrofit 的过程中,都遇到了注解这个概念.由于在学习Java的时候对这方面没有深入了解过,所以看起相关的代码来,总会有点不知其所以然,这里就注解和反射的使用做一下总结. 这里我们先从反射说起,了解了反射的意义及用法后,我们在看看注解的使用,最后叙述一下在Android开发中是怎样结合使用注解与反射. 反射 Java反射(Reflection)定义 Java反射机制是指在运行状态中 对于任意一个类,都能知道这个类的所有属性和方法: 对于任何一个对象

Android中的网络技术基础用法

有的时候用多了Android的一些开源框架用多了,就会把最基础的一些东西给忘了,今天来重温一下Android的网络基础.包括这个Http协议的网络请求,JSON解析. 使用HTTP协议访问网络 在 Android上发送 HTTP 请求的方式一般有两种,HttpURLConnection 和 HttpClient,先来看一下 HttpURLConnection 的用法.首先需要获取到 HttpURLConnection 的实例,一般只需 new出一个 URL 对象,并传入目标的网络地址,然后调用一

Android中网络框架的简单封装

个人博客 http://www.milovetingting.cn Android中网络框架的简单封装 前言 Android作为一款主要应用在移动终端的操作系统,访问网络是必不可少的功能.访问网络,最基本的接口有:HttpUrlConnection,HttpClient,而在后续的发展中,出现了Volley,OkHttp,Retrofit等网络封装库.由于各种原因,在实际的项目开发中,我们可能会需要在项目的版本迭代中,切换网络框架.如果对于网络框架没有好的封装,那么当需要切换网络框架时,可能就会

谈谈-Android中的接口回调技术

Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James对Android接口回调技术的理解(结合前人的知识和自己的实践). 使用一个比喻很形象地说明:客户端有个疑问打电话请教服务端,但服务端无法现场给出解答,相互之间约定:服务端一旦有答案,使用电话的方式反馈给客户端. 以上有三个主体:客户端.服务端和接口(方式). 接口回调的原理框图说明: Demo界面

关于android中事件传递和分发的一些小理解

android中 当我们的手指触摸屏幕将产生一个事件, (假设 这个过程中如果没有显示的去拦截该事件的话)   这个事件会逐级传递到视图的最底层,即使在中间某些视图会响应这个事件( 这个视图也不会去消费这个事件),     仍然是会传递到底层(底层不响应该事件),然后再由底层回传到顶层,在传回顶层的过程中 ,   原先会响应该事件的视图才会去消费这个事件 例如在左图中                                 A                               

浅谈android中仅仅使用一个TextView实现高仿京东,淘宝各种倒计时

今天给大家带来的是仅仅使用一个TextView实现一个高仿京东.淘宝.唯品会等各种电商APP的活动倒计时.最近公司一直加班也没来得及时间去整理,今天难得休息想把这个分享给大家,只求共同学习,以及自己后续的复习.为什么会想到使用一个TextView来实现呢?因为最近公司在做一些优化的工作,其中就有一个倒计时样式,原来开发的这个控件的同事使用了多个TextView拼接在一起的,实现的代码冗余比较大,故此项目经理就说:小宏这个就交给你来优化了,并且还要保证有一定的扩展性,当时就懵逼了.不知道从何处开始