本文主要讲述了OKHttp类库的发送Get请求和Post请求的用法,现在整理出来分享给Android程序员兄弟们,希望给他们的开发工作带来帮助。
官网对OKHttp的介绍还是比较详细,英文好的同学可以直接看官网的内容。使用OKHttp我们就需要OKHttp的jar包,同时由于OKHttp依赖于Okio,我们也需要下载Okio的jar包。这两个准备工作做好了就可以开始了。
一、发送Get请求
Request是OKHttp访问的请求,Callback是回调,有两种调用方式,一种是call.execute,这种方式不会开启新的线程,要在android中使用这个需要自己开启一个新线程,然后在线程中调用这个东西,这样反而麻烦了,所以个人推荐使用 call.enqueue,call.enqueue会开启一个新的线程,在新线程中调用网络请求。这样的话我们就得通过Handler来与 android UI交互了。
okHttpClient = new OkHttpClient();
request = new Request.Builder().url(HTTPURL).build();
Call call = okHttpClient.newCall(request);
// 开启异步线程访问网络
call.enqueue(new Callback() {
@Override
public void onResponse(Response response) throws IOException {
String res = response.body().string();
Message msg = new Message();
msg.what = REFRESHDATA;
msg.obj = res;
mHandler.sendMessage(msg);
}
@Override
public void onFailure(Request arg0, IOException arg1) {
}
});
二、发送POST请求
发送POST请求,一种是提交JSON数据:
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(JSON,
"{/"username/":/"lisi/",/"nickname/":/"李四/"}");
Request request = new Request.Builder().url(HTTPURL).post(body).build();
//后面的调用与GET相同
还有一种是提交键值对:
RequestBody formBody = new FormEncodingBuilder()
.add("username", "lisi").add("nickname", "李四").build();
Request request = new Request.Builder().url(HTTPURL).post(formBody)
.build();
总结
其实OKHttp相对于HttpURLConnection已经简单了许多,但是我还是觉得麻烦,而且官方亦不建议我们创建多个OkHttpClient实例,于是又对它进行了一层简单的封装。
import java.io.IOException;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
/**
* OKHttp封装工具类
*
* @author wangsong
*
* 2015-10-9
*/
public class OKHttpUtils {
private final static OkHttpClient M_OK_HTTP_CLIENT = new OkHttpClient();
static {
M_OK_HTTP_CLIENT.setConnectTimeout(30, TimeUnit.SECONDS);
}
/**
* 不开启异步线程
*
* @author wangsong 2015-10-9
* @param request
* @return
* @throws IOException
*/
public static Response execute(Request request) throws IOException {
return M_OK_HTTP_CLIENT.newCall(request).execute();
}
/**
* 开启异步线程访问,访问结果自行处理
*
* @author wangsong 2015-10-9
* @param request
* @param responseCallback
*/
public static void enqueue(Request request, Callback responseCallback) {
M_OK_HTTP_CLIENT.newCall(request).enqueue(responseCallback);
}
/**
* 开启异步线程访问,不对访问结果进行处理
*
* @author wangsong 2015-10-9
* @param request
* @param responseCallback
*/
public static void enqueue(Request request) {
M_OK_HTTP_CLIENT.newCall(request).enqueue(new Callback() {
@Override
public void onResponse(Response arg0) throws IOException {
}
@Override
public void onFailure(Request arg0, IOException arg1) {
}
});
}
/**
* 为HttpGet请求拼接一个参数
*
* @author wangsong 2015-10-9
* @param url
* @param name
* @param value
*/
public static String jointURL(String url, String name, String value) {
return url + "?" + name + "=" + value;
}
/**
* 为HttpGet请求拼接多个参数
*
* @author wangsong 2015-10-9
* @param url
* @param name
* @param value
*/
public static String jointURL(String url, Map<String, String> values) {
StringBuffer result = new StringBuffer();
result.append(url).append("?");
Set<String> keys = values.keySet();
for (String key : keys) {
result.append(key).append("=").append(values.get(key)).append("&");
}
return result.toString().substring(0, result.toString().length()-1);
}
}
本文涉及到的工具类下载地址https://github.com/lenve/OKHttpUtils
本文转载至:http://www.mobile-open.com/2015/85023.html
分享到:
相关推荐
这份"Android开发手册——API函数详解.zip_安卓API"资料深入浅出地阐述了Android API的各种函数用法,是Android应用开发者的宝贵资源。 首先,Android API分为多个层次,最基础的是Linux内核,提供了操作系统核心...
《安卓Android源码——Square.zip》的解析与详解 在移动操作系统领域,Android以其开源、灵活的特性,深受开发者喜爱。对于深入理解Android系统的工作原理,研究源码是至关重要的一步。Square公司作为知名的开源...
3. **网络请求**:了解Android的网络访问权限,以及使用HttpURLConnection或OkHttp进行HTTP请求的方法。 4. **用户界面设计**:掌握XML布局文件的编写,创建用户友好的界面,如地址栏、前进/后退按钮和刷新按钮。 5....
Android应用开发详解可能涉及了HTTP客户端库的使用,如OkHttp和Retrofit,以及如何处理JSON数据。此外,对于数据持久化,可能会介绍SQLite数据库的操作,以及如何使用ContentResolver进行数据查询。 源码部分通常...
《安卓Android源码——Fanfoudroid(饭否网开源项目)详解》 Fanfoudroid,作为一款基于Android平台的开源项目,是饭否网的移动应用源代码,为开发者提供了一个深入理解Android应用程序开发的绝佳实例。通过研究这个...
安卓Android源码中可能广泛使用了Google的Jetpack库,包括Navigation、Paging、Room等,这些都是现代Android开发的标准工具集,学习它们的用法有助于提升开发效率。 4. **响应式编程**: 如果源码中包含Retrofit...
Android提供了内建的HttpURLConnection缓存,也可以自定义缓存机制,例如使用LruCache或OkHttp的缓存功能。 **第7章:Android中的Socket编程** 当需要低级网络控制或长连接时,Socket编程就显得尤为重要。通过...
14. **第三方库集成**:可能会提及Gson、Retrofit、ButterKnife等常用第三方库的使用方法,提高开发效率。 源码部分则提供了实际项目的实例,让读者能够动手操作,通过实践中加深对理论知识的理解。这些项目可能...
### OkHttp源码详解 #### 一、概述 本文旨在深入剖析OkHttp的内部机制,特别是针对其核心组件——拦截器(Interceptors)的工作原理及其与缓存(CacheInterceptor)和连接(ConnectInterceptor)之间的交互过程。...
《OkHttp 4.2.2及其依赖详解》 在当今的移动开发中,网络通信是应用程序不可或缺的一部分。OkHttp,作为一个高效的HTTP客户端库,被广泛应用于Android和Java项目中。本文将深入探讨OkHttp 4.2.2版本及其核心依赖...
《Android入门到精通详解》是一本全面覆盖Android开发基础知识与高级技术的教程,旨在帮助初学者迅速掌握Android应用开发,并逐步提升至精通水平。书签的完整性确保了读者可以轻松定位到每个章节的关键内容,方便...
【OKhttp 3.11/10下载】——安卓网络框架详解 在移动开发领域,尤其是Android平台,网络通信是应用不可或缺的一部分。为了高效、便捷地处理网络请求,开发者通常会选择使用第三方库,其中OKhttp就是一款备受青睐的...
《Android开发入门详解——基于EOR.rar教程》 在当今移动互联网时代,Android开发作为其中的重要一环,吸引着无数编程爱好者投身其中。本篇内容将根据“eor.rar”压缩包中的“M290WCDMA2000.pdf”文件,为你详细...
在Android开发领域,Eclipse曾是主流的开发环境,但随着技术的发展,Google推出了专门针对Android应用开发的集成开发环境(IDE)——Android Studio。Android Studio提供了更强大的功能,如更快的构建速度、智能代码...
本项目标题为“服务器——基于CS模式的android手机与PC机通信系统的开发”,其核心是客户端-服务器(Client-Server, CS)架构,这种模式广泛应用于分布式系统中,允许不同平台的设备互相交互数据。 一、CS模式详解 ...
3. 使用OkHttp:OkHttp是目前Android开发中常用的第三方HTTP库,它提供了高效、易用的接口,支持异步请求、自动重试、缓存等功能,大大简化了网络编程。 四、Android HTTP实战 在实际开发中,我们通常会结合...
《Android居民小区管理系统详解》 在移动应用开发领域,Android平台因其开源性和广泛的应用范围,成为了许多开发者首选的开发环境。对于学习Android开发的学生来说,理解并构建一个完整的居民小区管理系统是一个极...
【Android面试核心知识点详解】 在Android开发领域,找到一份理想的工作不仅需要扎实的编程技能,还需要对整个Android系统有深入的理解。"stormzhang收藏——Android找工作面试宝典"是一份珍贵的资源,包含了...
本文将详细介绍这款SDK的主要特点、功能及使用方法。 一、uniapp与Android-SDK的关系 uniapp是一款基于Vue.js的多端开发框架,它允许开发者使用一套代码编写出适应iOS、Android、Web等多平台的应用。而Android-SDK...
【安卓背单词软件详解——基于MVP架构与网络请求技术】 在移动应用开发领域,安卓平台上的背单词软件是常见的教育类应用。本项目采用现代的MVP(Model-View-Presenter)架构模式,结合rxjava、retrofit2和okhttp3三...