`
caiyunlong
  • 浏览: 187723 次
  • 性别: Icon_minigender_1
  • 来自: 海口
社区版块
存档分类
最新评论

Android开发——OKHttp用法详解

阅读更多
本文主要讲述了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函数详解.zip_安卓API"资料深入浅出地阐述了Android API的各种函数用法,是Android应用开发者的宝贵资源。 首先,Android API分为多个层次,最基础的是Linux内核,提供了操作系统核心...

    安卓Android源码——Square.zip

    《安卓Android源码——Square.zip》的解析与详解 在移动操作系统领域,Android以其开源、灵活的特性,深受开发者喜爱。对于深入理解Android系统的工作原理,研究源码是至关重要的一步。Square公司作为知名的开源...

    安卓Android源码——MyBrowser(简单网页浏览器).zip

    3. **网络请求**:了解Android的网络访问权限,以及使用HttpURLConnection或OkHttp进行HTTP请求的方法。 4. **用户界面设计**:掌握XML布局文件的编写,创建用户友好的界面,如地址栏、前进/后退按钮和刷新按钮。 5....

    Android应用开发详解-附源码

    Android应用开发详解可能涉及了HTTP客户端库的使用,如OkHttp和Retrofit,以及如何处理JSON数据。此外,对于数据持久化,可能会介绍SQLite数据库的操作,以及如何使用ContentResolver进行数据查询。 源码部分通常...

    安卓Android源码——Fanfoudroid(饭否网开源项目).zip

    《安卓Android源码——Fanfoudroid(饭否网开源项目)详解》 Fanfoudroid,作为一款基于Android平台的开源项目,是饭否网的移动应用源代码,为开发者提供了一个深入理解Android应用程序开发的绝佳实例。通过研究这个...

    安卓Android源码——新版网易源码效果图.zip

    安卓Android源码中可能广泛使用了Google的Jetpack库,包括Navigation、Paging、Room等,这些都是现代Android开发的标准工具集,学习它们的用法有助于提升开发效率。 4. **响应式编程**: 如果源码中包含Retrofit...

    android4.0网络编程详解——源码

    Android提供了内建的HttpURLConnection缓存,也可以自定义缓存机制,例如使用LruCache或OkHttp的缓存功能。 **第7章:Android中的Socket编程** 当需要低级网络控制或长连接时,Socket编程就显得尤为重要。通过...

    Android经典项目开发实战 PDF+源码

    14. **第三方库集成**:可能会提及Gson、Retrofit、ButterKnife等常用第三方库的使用方法,提高开发效率。 源码部分则提供了实际项目的实例,让读者能够动手操作,通过实践中加深对理论知识的理解。这些项目可能...

    OkHttp源码详解

    ### OkHttp源码详解 #### 一、概述 本文旨在深入剖析OkHttp的内部机制,特别是针对其核心组件——拦截器(Interceptors)的工作原理及其与缓存(CacheInterceptor)和连接(ConnectInterceptor)之间的交互过程。...

    okhttp-4.2.2及依赖包.zip

    《OkHttp 4.2.2及其依赖详解》 在当今的移动开发中,网络通信是应用程序不可或缺的一部分。OkHttp,作为一个高效的HTTP客户端库,被广泛应用于Android和Java项目中。本文将深入探讨OkHttp 4.2.2版本及其核心依赖...

    Android入门到精通详解(完整书签)

    《Android入门到精通详解》是一本全面覆盖Android开发基础知识与高级技术的教程,旨在帮助初学者迅速掌握Android应用开发,并逐步提升至精通水平。书签的完整性确保了读者可以轻松定位到每个章节的关键内容,方便...

    okhttp 3.11/10下载

    【OKhttp 3.11/10下载】——安卓网络框架详解 在移动开发领域,尤其是Android平台,网络通信是应用不可或缺的一部分。为了高效、便捷地处理网络请求,开发者通常会选择使用第三方库,其中OKhttp就是一款备受青睐的...

    eor.rar_android开发

    《Android开发入门详解——基于EOR.rar教程》 在当今移动互联网时代,Android开发作为其中的重要一环,吸引着无数编程爱好者投身其中。本篇内容将根据“eor.rar”压缩包中的“M290WCDMA2000.pdf”文件,为你详细...

    Android开发工程师必备

    在Android开发领域,Eclipse曾是主流的开发环境,但随着技术的发展,Google推出了专门针对Android应用开发的集成开发环境(IDE)——Android Studio。Android Studio提供了更强大的功能,如更快的构建速度、智能代码...

    服务器——基于CS模式的android手机与PC机通信系统的开发

    本项目标题为“服务器——基于CS模式的android手机与PC机通信系统的开发”,其核心是客户端-服务器(Client-Server, CS)架构,这种模式广泛应用于分布式系统中,允许不同平台的设备互相交互数据。 一、CS模式详解 ...

    Android-HTT.zip_android_htt:2360.com

    3. 使用OkHttp:OkHttp是目前Android开发中常用的第三方HTTP库,它提供了高效、易用的接口,支持异步请求、自动重试、缓存等功能,大大简化了网络编程。 四、Android HTTP实战 在实际开发中,我们通常会结合...

    Android居民小区管理系统,良心创作,适合参考和交作业

    《Android居民小区管理系统详解》 在移动应用开发领域,Android平台因其开源性和广泛的应用范围,成为了许多开发者首选的开发环境。对于学习Android开发的学生来说,理解并构建一个完整的居民小区管理系统是一个极...

    stormzhang收藏——Android找工作面试宝典

    【Android面试核心知识点详解】 在Android开发领域,找到一份理想的工作不仅需要扎实的编程技能,还需要对整个Android系统有深入的理解。"stormzhang收藏——Android找工作面试宝典"是一份珍贵的资源,包含了...

    uniapp安卓离线sdk_Android-SDK@3.2.3.81011_20210826

    本文将详细介绍这款SDK的主要特点、功能及使用方法。 一、uniapp与Android-SDK的关系 uniapp是一款基于Vue.js的多端开发框架,它允许开发者使用一套代码编写出适应iOS、Android、Web等多平台的应用。而Android-SDK...

    安卓-背单词软件,MVP架构, rxjava + retrofit2 + okhttp3 做网络请求

    【安卓背单词软件详解——基于MVP架构与网络请求技术】 在移动应用开发领域,安卓平台上的背单词软件是常见的教育类应用。本项目采用现代的MVP(Model-View-Presenter)架构模式,结合rxjava、retrofit2和okhttp3三...

Global site tag (gtag.js) - Google Analytics