项目中快速搭建Retrofit
来源:互联网 发布:蚁群算法 c语言 编辑:程序博客网 时间:2024/05/20 20:56
本篇博客将和大家分享如何在项目中快速搭建Retrofit。关于Retrofit的基本使用方法网上的例子很多,大家可自行参考,这里,我也给大家分享几个比较好的入门文章,仅供参考:
https://gold.xitu.io/entry/57a97dc38ac247005f4306dd
https://gold.xitu.io/entry/579f1749a633bd006009eca4
首先要引入该库:
今天的主题是和大家分享如何在项目中快速搭建一个Retrofit。首先我们知道,网络请求实例在App中都是以单例模式存在的。所以我们就需要创建一个网络请求工具类来封装。首先要引入该库:
compile 'com.squareup.retrofit2:retrofit:2.1.0'compile 'com.squareup.retrofit2:converter-gson:2.1.0'
关于单例模式的写法,相信大家都不陌生,单例模式的实现方式很多种:懒汉式,饿汉式,枚举,内部类等等。。这里我就不一一详细说明了。下面来看代码:
package com.example.song.retrofittest.model;import retrofit2.Retrofit;import retrofit2.converter.gson.GsonConverterFactory;/** * Created by Song on 2016/8/30. */public class HttpUtils { private static Retrofit mRetrofit; private static volatile HttpUtils httpUtils; private HttpUtils() { mRetrofit = new Retrofit.Builder() .baseUrl("") .addConverterFactory(GsonConverterFactory.create()) .build(); } public static HttpUtils getInstance() { if(httpUtils == null) { synchronized (HttpUtils.class) { if(httpUtils == null) { httpUtils = new HttpUtils(); return httpUtils; } } } return httpUtils; }从上面代码我们看到:
(1)私有构造函数中,我们初始化了Retrofit。
(2)公开getInstance方法用来实现单例模式。
现在Retorfit初始化完了。就可以使用该对象来操作网络请求了。我们知道,Retrofit发送请求需要使用create方法。来看下源码:
public <T> T create(final Class<T> service) { Utils.validateServiceInterface(service); if (validateEagerly) { eagerlyValidateMethods(service); } return (T) Proxy.newProxyInstance(service.getClassLoader(), new Class<?>[] { service }, new InvocationHandler() { private final Platform platform = Platform.get(); @Override public Object invoke(Object proxy, Method method, Object... args) throws Throwable { // If the method is a method from Object then defer to normal invocation. if (method.getDeclaringClass() == Object.class) { return method.invoke(this, args); } if (platform.isDefaultMethod(method)) { return platform.invokeDefaultMethod(method, service, proxy, args); } ServiceMethod serviceMethod = loadServiceMethod(method); OkHttpCall okHttpCall = new OkHttpCall<>(serviceMethod, args); return serviceMethod.callAdapter.adapt(okHttpCall); } });}上面就是Retrofit的create方法的源码,大致可以看出,create方法使用了泛型来控制参数和返回参数的类型保持一致。细心的小伙伴肯定看到了Proxy.newProxyInstance()方和new InvocationHandler(){}!!没错,这不就是Java中的动态代理机制吗!!!并且我们看到在invoke方法中,对method进行一些判断并封装成ServiceMethod方法,通过okhttpCall来发送请求。
通过上面的分析,我们就需要公开一个create方法,下面来看代码:
public <T>T create(Class<T> cls) { return mRetrofit.create(cls);}可以看到,我们在create方法中,通过调用Retrofit实例的create方法来返回具体的请求服务实例。
这样,一个Retrofit的网络请求封装就完成了。在Activity中具体使用:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.content_main); LoadData loadData = HttpUtils.getInstance().create(LoadData.class); loadData.loadData("001"); }}ok,到这里对Retorfit的封装就完成了。分分钟搞定Retrofit的集成使用!!
0 0
- 项目中快速搭建Retrofit
- 从零开始搭建一个项目(rxJava+Retrofit+Dagger2)
- Maven 项目快速搭建
- express快速搭建项目
- 快速搭建mvn项目
- grunt快速搭建项目
- 快速搭建SpringBoot项目
- springBoot快速搭建项目
- Android Mvp快速搭建框架MVP+Dagger2+Retrofit+Rxjava
- SpringBoot学习:IDEA中快速搭建springboot项目
- SpringBoot学习:IDEA中快速搭建springboot项目
- Retrofit搭建网络请求框架,所有项目可用
- 快速搭建项目 windrapid 介绍
- 快速搭建Tiny开发项目
- 快速搭建Tiny开发项目
- android快速搭建项目积累
- gulp快速搭建web项目
- 快速搭建Spring Boot项目
- Log4j配置详解
- Spring Boot之基于注解的数据格式化
- windows7远程
- 上传图片前不上传预览?
- zk还能这么玩儿 - 一个域名 解析所有
- 项目中快速搭建Retrofit
- 建议15: 使用dynamic来简化反射实现
- windows config manager
- 如何正确的使用Lerp In Unity
- ArrayList——内存开销,时间上的开销
- 大数据时代,IBM 带你玩转大数据处理
- memcached入门搭建
- Unreal Engine 4 物理模拟之物理碰撞、重叠与射线检测
- Android 自定义虚线段长和点宽