OkHttp+ Retrofit使用从0开始(一)

几种网络框架的比较

1、volley

一个简单的http异步请求库,但不支持同步,不能post大数据(上传文件时有问题);

2、android-async-http

和volley一样,是异步的请求库,只不过volley使用的是httpUrlConnection,而它使用的是HttpClient。这个库已经不再适合Android;

3、okhttp

基于httpUrlConnection,支持同步和异步,但需要自己再封装下;

4、retrofit;

对 okhttp再次封装,在项目中可以直接使用。

这里主要介绍使用okhttp+retrofit

调用的步骤

1、引入Git上的项目

compile ‘com.squareup.retrofit2:retrofit:2.0.2’(需要在GitHub上定位到最新的版本),Rebuild项目。

2、在项目中引用retrofit,分为几个部分

- module对象
- Converter的实现类
- Service类(定义网址中不固定的部分)
- OkHttpClient和Retrofit

module对象(Bean)

public class ScreenBean {

    public final String mTitle;
    public final String mSize;

    public ScreenBean(String title,String size){
        mTitle = title;
        mSize = size;
    }

}

ScreenConvert

public class ScreenConvert implements Converter<ResponseBody,ScreenBean>{

    static final ScreenConvert.Factory FACTOYR = new ScreenConvert.Factory(){
        @Override
        public Converter<ResponseBody, ?> responseBodyConverter(
                Type type, Annotation[] annotations, Retrofit retrofit) {
            if(type == ScreenBean.class)return new ScreenConvert();
            else return null;
        }
    };

    @Override
    public ScreenBean convert(ResponseBody value) throws IOException {
        //values.string 把服务器上请求的数据,转换成string格式
        return ...;
    }
}

PageService

public interface PageService{
        @GET("GetHotDownload.xml")
        Call<ScreenBean> get(@Query("pageNum") String pageNum1,
                             @Query("packNumForOnePage") String packNumForOnePage,
                             @Query("userId") String userId,@Query("codeVersion") String version,
                             @Query("classId") String classId);
    }

加载部分

Dispatcher dispatcher = new Dispatcher(Executors.newFixedThreadPool(20));//线程池
        dispatcher.setMaxRequests(20);//最大的请求数量
        dispatcher.setMaxRequestsPerHost(1);//主机同一个时间,最大的请求数量

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .dispatcher(dispatcher)
                .connectionPool(new ConnectionPool(100,30, TimeUnit.SECONDS))
                .build();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(mUrl)
                .addConverterFactory(ScreenConvert.FACTOYR)
                .client(okHttpClient)
                .build();

        PageService pageService = retrofit.create(PageService.class);
        pageService.get("1","12","0","14","0").enqueue(new Callback<ScreenBean>() {
            @Override
            public void onResponse(Call<ScreenBean> call, Response<ScreenBean> response) {
                if(response.isSuccessful()){
                    Log.i(TAG, "onResponse: 成功");
                }else{
                    Log.i(TAG, "onResponse: 失败");
                }
            }

            @Override
            public void onFailure(Call<ScreenBean> call, Throwable t) {
                Log.i(TAG, "onFailure: 失败"+t.toString());
            }
        });

注意:把上面的网址替换掉,换成自己的网址

到这一步,已经可以实现基于Retrofit+OkHttp,实现和网络数据的交互。但在实际的运用中,还会设计更加复杂的情况,比如Cookie的缓存,添加头部等,下一个章节再具体谈论。

参考文档

volley的介绍:http://bxbxbai.github.io/2014/09/14/android-working-with-volley/

http://square.github.io/retrofit/

时间: 2024-10-11 00:49:18

OkHttp+ Retrofit使用从0开始(一)的相关文章

OkHttp,Retrofit 1.x - 2.x 基本使用

Square 为广大开发者奉献了OkHttp,Retrofit1.x,Retrofit2.x,运用比较广泛,这三个工具有很多相似之处,初学者可能会有一些使用迷惑.这里来总结一下它们的一些基本使用和一些细微差别. /************** Retrofit 基本使用方法 Retrofit 到底是返回什么? void, Observable, Call? *************/ /********************************************Retrofit**

Android OkHttp + Retrofit 下载文件与进度监听

本文链接 下载文件是一个比较常见的需求.给定一个url,我们可以使用URLConnection下载文件. 使用OkHttp也可以通过流来下载文件. 给OkHttp中添加拦截器,即可实现下载进度的监听功能. 使用流来实现下载文件 代码可以参考:https://github.com/RustFisher/android-Basic4/tree/master/appdowloadsample 获取并使用字节流,需要注意两个要点,一个是服务接口方法的 @Streaming 注解,另一个是获取到Respo

Android 使用Okhttp/Retrofit持久化cookie的简便方式

首先cookie是什么就不多说了,还是不知道的话推荐看看这篇文章 Cookie/Session机制详解 深入解析Cookie技术 为什么要持久化cookie也不多说了,你能看到这篇文章代表你有这个需求. cookie简单来说就是服务器在客户端中保存的键值对,比如说早期的购物车,保持登陆状态都是使用的cookie. 但是cookie的功能是依赖于浏览器的,大多数浏览器都有管理cookie的功能.当然,你也能通过设置禁止掉这项功能,毕竟cookie是很容易泄露用户隐私的 上面也说了cookie功能依

Android OkHttp + Retrofit 取消请求的方法

本文链接 前言 在某一个界面,用户发起了一个网络请求,因为某种原因用户在网络请求完成前离开了当前界面,比较好的做法是取消这个网络请求.对于OkHttp来说,具体是调用Call的cancel方法. 如何找到这一个网络请求并取消掉它呢? 操作大致分为3步.第一步,在建立请求时,给请求(request)添加标记:第二步,根据标记,找到请求:最后,取消这个请求. OkHttp中的tag 要取消一个请求,OkHttp中可以使用cancel方法,参考. OkHttp的request对象有tag.可以根据ta

Retrofit 2.0:迄今为止最大的更新最好的Android HTTP客户端库

前言 来自移动支付公司square公司的作品,开源世界top5的最小公司,首先我自己是一个忠实广场粉,okhttp.picasso.greendao.okio等等~ 据Square CTO Bob Lee的说法,Square已经将超过60个项目提交到开源社区,贡献了25万行左右的代码. 原文:Retrofit 2.0: The biggest update yet on the best HTTP Client Library for Android 因为其简单与出色的性能,Retrofit 是

Https系列之四:https的SSL证书在Android端基于okhttp,Retrofit的使用

Https系列会在下面几篇文章中分别作介绍: 一:https的简单介绍及SSL证书的生成二:https的SSL证书在服务器端的部署,基于tomcat,spring boot三:让服务器同时支持http.https,基于spring boot四:https的SSL证书在Android端基于okhttp,Retrofit的使用 所有文章会优先在:微信公众号"颜家大少"中发布转载请标明出处 先来回顾一下 前面已分别介绍了https,SSL证书的生成,并完成了服务器端的https的部署并提到一

[Android] 转-RxJava+MVP+Retrofit+Dagger2+Okhttp大杂烩

原文url: http://blog.iliyun.net/2016/11/20/%E6%A1%86%E6%9E%B6%E5%B0%81%E8%A3%85/ 这几年来android的网络请求技术层出不穷,网络请求从最初的HttpClient,HttpURLConnection到Volley,OkHttp,Retrofit.但是如果直接使用,每个网络请求都会重复很多相同的代码,这显然不是一个老司机需要的.接下来我们就讲讲网络请求封装那点事. 主要利用以下技术点 - Retrofit2 Retrof

RxAndroid+RxJava+Gson+retrofit+okhttp初步搭建android网络请求框架

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } span.s1 { font: 12.0px "Helvetica Neue" } 新建工程集成,工具集成 一.集成 RxAndroid+RxJava git官网 https://github.com/ReactiveX/RxAndroid Gson git官网 https://github.co

Mvp Retrofit Okhttp Rxjava

MainActivity package com.bwie.shexinhai; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import com.bwie.shexinhai.Adapter