一直想好好学习使用retrofit今天就学习总结
首先是github的地址连接:
https://github.com/square/retrofit
之后是依赖:
compile 'com.squareup.retrofit2:retrofit:2.3.0'
注意: Retrofit requires at minimum Java 7 or Android 2.3.
关于retrofit的详解的介绍:
http://square.github.io/retrofit/
网络请求框架:
//网络请求框架
compile 'com.squareup.retrofit2:retrofit:2.3.0' // 上面已经存在
compile 'com.squareup.retrofit2:converter-scalars:2.3.0' //
compile 'com.squareup.retrofit2:converter-gson:2.3.0' //
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' //
retrofit的创建
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();
创建一个retrofit的管理类,实现单例:
我们首先是在application中对retrofit的初始化操作:
//在自定义Application中初始化
public static void init() {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(50, TimeUnit.SECONDS);
builder.readTimeout(50, TimeUnit.SECONDS);
builder.writeTimeout(50, TimeUnit.SECONDS);
builder.retryOnConnectionFailure(true);
OkHttpClient client = builder.build();
mRetrofit = new Retrofit.Builder()
.baseUrl(UrlConstant.BASE_URL)
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
.build();
}
解释如下: 创建一个OkhttpClient,之后设置参数,后最后retrofit的创建.
完整的代码:
public class RetrofitManager {
private static RetrofitManager mRetrofitManager;
private static Retrofit mRetrofit;
private static Retrofit mDRetrofit;
// 构造方法的私有
private RetrofitManager() {
}
/**
* 创建网络请求
*
* @param reqServer 网络接口
* @param <T> 泛型
* @return 返回网络接口对应的请求类
*/
private <T> T createReq(Class<T> reqServer) {
return mRetrofit.create(reqServer);
}
/**
* 获取服务器网络请求接口对应的类
*
* @return 服务器网络请求接口对应的类
*/
public ServerApi getServer() {
return createReq(ServerApi.class);
// 实质就是创建了 ServerApi的代理对象
}
/**
* 返回线程安全的单例
*
* @return RetrofitManager单例
*/
public static synchronized RetrofitManager getInstance() {
if (mRetrofitManager == null) {
mRetrofitManager = new RetrofitManager();
}
return mRetrofitManager;
}
//在自定义Application中初始化
public static void init() {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(50, TimeUnit.SECONDS);
builder.readTimeout(50, TimeUnit.SECONDS);
builder.writeTimeout(50, TimeUnit.SECONDS);
builder.retryOnConnectionFailure(true);
OkHttpClient client = builder.build();
mRetrofit = new Retrofit.Builder()
.baseUrl(UrlConstant.BASE_URL)
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create()) //使用工厂模式创建Gason的解析器
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
.build();
}
}
这里面的几个类需要说明一下子:
UrlConstant.BASE_URL就是我们的主机host;
ServerApi主要是各个主机访问地址,会和BASE_URL拼接成完整的路劲来访问. (Retrofit将 Http请求 抽象成 Java接口:采用 注解 描述网络请求参数 和配置网络请求参数 ,注意点
第一:用 动态代理 动态 将该接口的注解“翻译”成一个 Http 请求,最后再执行 Http 请求
第二:接口中的每个方法的参数都需要使用注解标注,否则会报错
)
注意点: 创建Retrofit实例时需要通过Retrofit.Builder,并调用baseUrl方法设置URL。
baseurl 必须是以斜杠(/)结束的,便于后期的url拼接.
我们的访问的方法都是定义在一个接口里面,我们需要调用里面的方法,我么需要生成一个代理,可以理解为广播接收者的方法.
retrofit的注解问题
http的请求的方式:常见的就是post 和get请求.
在我们需要设置代理的接口文件中,最后回你和baseurl组合成完整的路劲,接收的一般是path
http://blog.csdn.net/carson_ho/article/details/73732076
使用 Retrofit 的步骤共有7个:
步骤1:添加Retrofit库的依赖
步骤2:创建 接收服务器返回数据 的类
步骤3:创建 用于描述网络请求 的接口
步骤4:创建 Retrofit 实例
步骤5:创建 网络请求接口实例 并 配置网络请求参数
步骤6:发送网络请求(异步 / 同步)
我们在项目中使用的是Rxjava
依赖的框架:
//RxJava框架
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.5'
日志打印框架:
//日志打印框架
compile 'com.orhanobut:logger:2.1.1'
注解的分类是:
第一部分就是上面的关于网络请求的注解: get和post比较常见 特殊的一个注解就是 @Http这个注解,可以替换上面的七个注解和更多功能的拓展.
第二类标记类:
第一个标记注解: @formUrlEncoded 表示发送form-encoded的数据
每个键值对需要用@Filed来注解键名,随后的对象需要提供值。
第二个标记注解: @Multipart 表示发送form-encoded的数据(适用于 有文件 上传的场景)
每个键值对需要用@Part来注解键名,随后的对象需要提供值。
第三个注解: 返回的形式是以流的形式返回的,使用与数据比较大的情况.
第三类注解:
RxJava与CallAdapter
我们在前面见到的是 converter是可以转化为我么需要的实体对象,而不是只是Responsebody
相同的 CallAdapter 是对call的替换,Observable来替换call;
使用Eventbus来传递一个bean对象
recyclerview的使用
最后是一个模拟json的网址: