retrofit的模拟学习和Eventbus的传递一个bean对象和Intent传递一个bean对象

一直想好好学习使用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的网址:

https://www.mocky.io/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值