android okhttp加公共参数_Android源码系列解密Retrofit

Retrofit是什么?

简介

Retrofit,中文的翻译为“式样翻新”的意思,是一个基于OKHttp的RESTful网络请求框架。通俗一点来说,Retrofit就是一个网络请求框架的封装。同样是由Square公司开源的Android热门网络框架之一,其具有功能强大、简洁易用及高可拓展性特点。

官网网址:(http://square.github.io/retrofit/)

Github地址:(https://github.com/square/retrofit)

特点

1、基于OkHttp并遵循Restful API设计风格

2、通过注解的形式,可简便的配置网络请求参数

3、支持同步及异步的网络请求方式

4、支持RxJava

5、支持多种数据格式的解析(Json、XML、Protobuf等)

Retrofit怎么用?

1、gradle引入库

implementation 'com.squareup.retrofit2:retrofit:2.4.0'implementation 'com.squareup.retrofit2:converter-gson:2.4.0' //配置使用Gson解析响应数据 可选implementation 'com.squareup.retrofit2:adapter-rxjava:2.4.0' //配置支持RxJava 可选

2、初始化Retrofit对象

Retrofit retrofit = new Retrofit.Builder()                .baseUrl(BASE_URL) //配置baseUrl                .addConverterFactory(GsonConverterFactory.create()) //配置使用Gson解析响应数据                .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) //配置支持RxJava                .build();
public interface WeatherService {
            //使用GET请求 直接返回原始数据        @GET("weather?location=%E5%98%89%E5%85%B4&output=json&ak=5slgyqGDENN7Sy7pw29IUvrZ")        Call cityNameQueryWeather();                //使用GET请求 返回Json映射对象        @GET("{weather}?location=%E5%98%89%E5%85%B4&output=json")        Call cityWeatherPath(@Path("weather") String weather, @Query("ak") String ak);               //使用POST请求 支持RxJava返回        @FormUrlEncoded()        @POST("{weather}")        rx.Observable cityWeatherPost(@Path("weather") String weather, @Field("ak") String ak, @Field("location") String location, @Field("output") String output);                }

同步请求

WeatherService weatherService = retrofit.create(WeatherService.class);        Call responseBodyCall = weatherService.cityNameQueryWeather();        try {
                Response responseBody = responseBodyCall.execute();            System.out.println("call:" + responseBody.body().string());        } catch (IOException e) {
                e.printStackTrace();        }

异步请求

 WeatherService weatherService = retrofit.create(WeatherService.class);        Call responseBodyCall = weatherService.cityWeatherPath("weather", "5slgyqGDENN7Sy7pw29IUvrZ");        responseBodyCall.enqueue(new Callback() {
                @Override            public void onResponse(Call call, Response response) {
                    System.out.println("call:" + response.toString());            }            @Override            public void onFailure(Call call, Throwable t) {
                }        })

RxJava支持

WeatherService weatherService = retrofit.create(WeatherService.class);        weatherService.rxCityWeatherPost("weather", "5slgyqGDENN7Sy7pw29IUvrZ", "%E5%98%89%E5%85%B4", "json")                .subscribeOn(Schedulers.io())        //在新线程里面处理网络请求                .observeOn(AndroidSchedulers.mainThread())  //在主线程里面接受返回的数据                .subscribe(new rx.Observer() {
                        @Override                    public void onCompleted() {
                        }                    @Override                    public void onError(Throwable e) {
                        }                    @Override                    public void onNext(WeatherResp weatherResp) {
                            System.out.println("call:" + weatherResp.toString());                    }                }); 

详细的Retrofit的注解配置及各注解的使用,推荐参考

这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解)

(https://blog.csdn.net/carson_ho/article/details/73732076)

Retrofit核心执行流程是怎样?

关键类功能说明

功能说明
Retrofit 里面包含了很多对象,serviceMethodCache(自定义的接口映射对象集合)、baseUrl(请求地址)、callFactory(默认为OKHttpCall)、converterFactories(数据解析器工厂集合)、callAdapterFactories(Call适配器工厂集合)、callbackExecutor(回调执行,Android平台默认为MainThreadExecutor)使用Builder模型构建
Platform Retrofit中用来管理多平台的方法,支持Android、Java8。通过findPlatform获取对应的平台,同时也初始化了defaultCallAdapterFactory工厂
ServiceMethod 接口映射的网络请求对象,通过动态代理,将自定义接口的标注转换为该对象,将标注及参数生成OkHttp所需的Request对象。Retrofit的create通过动态代理拦截,将每一个自定义接口转换成为一个ServiceMethod对象,并通过通过serviceMethodCache进行缓存。
Call Retrofit定义的网络请求接口,包含execute、enqueue等方法
OkHttpCall Ohttp的Call实现,通过createRawCall得到真正的 okhttp3.Call对象,用于进行实际的网络请求
CallAdapter.Factory CallAdapter的静态工厂,包含get的抽象方法,用于生产CallAdapter对象
ExecutorCallAdapterFactory Android平台默认的CallAdapter工厂,get方法使用匿名内部类实现CallAdapter,返回ExecutorCallbackCall,实现了Call
ExecutorCallbackCall 采用静态代理设计,delegate实际为OkHttpCall,使用callbackExecutor实现回调在主线程中执行
RxJavaCallAdapterFactory Rxjava平台的CallAdapter工厂,get方法返回RxJavaCallAdapter对象
RxJavaCallAdapter Rxjava平台的设配器,返回observable对象
Converter.Factory 数据解析器工厂,用于生产Converter实例
GsonConverterFactory 数据解析工厂实例,返回了GsonResponseBodyConverter数据解析器
GsonResponseBodyConverter Gson的数据解析器,将服务端返回的json对象转换成对应的java模型
Response Retrofit网络请求响应的Response

代码执行流程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值