Retrofit2.0+Rxjava2.0+MVP使用小记(一)

一、引言

Retrofit+Rxjava+MVP已经出来很长一段时间了,一直以来只是懂一些皮毛,最近静下来学习了一下。决定总结一下使用的方法,于是有了本系列使用小记,这是第一篇。本文仅供参考学习,如有不妥之处,还望批评指正。

二、基本内容介绍

2.1 Retrofit的使用方法教程很多,这里就不细究了,主要记录几点:

2.1.1 Retrofit可以使用常规的Call/CallBack方式来处理网络请求的返回值,使用同步/异步方式发起请求。比如说通常看到的这种:

/* 1.创建Retrofit实例*/
OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
httpClientBuilder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
Retrofit mRetrofit = new Retrofit.Builder()
                    .client(httpClientBuilder.build())
                    .baseUrl("https://api.douban.com/v2/")
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
/* 2.关联请求服务(一个接口,而非真正的服务) */       
RetrofitService service = mRetrofit.create(RetrofitService.class);
/* 3.创建请求实例*/
Call<Book> call =  service.getSearchBook("Java编程思想", null, 0, 1);
/* 4.将请求放入请求队列(execute同步,enqueue异步),获得返回数据*/
call.enqueue(new Callback<Book>() {
    @Override
    public void onResponse(Call<Book> call, Response<Book> response) {
        text.setText(response.body()+"");
    }
    @Override
    public void onFailure(Call<Book> call, Throwable t) {
    }
});
/* 那个名字是服务的接口*/
public interface RetrofitService {
    @GET("book/search")
    Call<Book> getSearchBook(@Query("q") String name, 
                             @Query("tag") String tag, 
                             @Query("start") int start, 
                             @Query("count") int count);
}

2.1.2 Retrofit可以使用Rxjava作为回调适配器、线程管理器,以观察者模式(Observer/Observable)来处理网络请求返回值。

/*这里写与上面的区别之处*/
/* 1.首先,是RetrofitService返回值不同,观察者模式返回的不是请求Call<T>,而是Observalble<T>*/
@GET("book/search")
Observalable<Book> getSearchBook(@Query("q") String name, 
                             @Query("tag") String tag, 
                             @Query("start") int start, 
                             @Query("count") int count);

/* 2.创建Retrofit实例的时候,指定的是Rxjava的适配器*/
public class HttpMethods {
/*...可以私有化构造方法,使用getInstance()单例模式*/
OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
httpClientBuilder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
mRetrofit = new Retrofit.Builder()
                .client(httpClientBuilder.build())
                .addConverterFactory(GsonConverterFactory.create())
                // RxJava2CallAdapter!
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .baseUrl(Constants.Url.BASEURL)
                .build();
}
/* 3.1 可以指定请求过程、回调结果运行的线程;
 * 3.2 以一种订阅的关联方式,联结请求和返回值;
 * 3.3 返回值回调由Consumer<T>对象的accept()承担, Action承担完成后的处理。
 *     (Consumer<Json2DataBean>、Consumer<Throwable>等)
 */
 service.getSearchBook("Java编程思想", null, 0, 1)
                .subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(dataConsumer, errorConsumer, completeAction);

HttpMethods.getInstance()
           .getSearchBook(
           new Consumer<Book>() {
               @Override
               public void accept(Book response) throws Exception {
                   Log.d(RRTAG, "response=" + response.toString());
               }
           },
           new Consumer<Throwable>() {
               @Override
               public void accept(Throwable throwable) throws Exception {
                   Log.d(RRTAG, "throw=" + throwable);
               }
           },
           new Action() {
               @Override
               public void run() throws Exception {
                   Log.d(RRTAG, "complete!");
               }
           },
           "Java编程思想",
           null, 
           0, 
           1);

2.1.3 Retrofit通常使用注解的方式来请求。

常见的注解有:
@GET

@POST

@Path/@Query/@QueryMap/@Body/@BodyMap/@Header/@HeaderMap/@FormUrlEncoded

更多关于Retrofit的内容

2.2 RxJava:
2.2.1 RxJava2.0优点

1. 使用的主要好处是简化了先前适配器的队列、线程管理;

2. 简化了回调数据转化Java对象的过程;

3. 使复杂的网络请求逻辑简化;

4. 合适封装多个相似的网络请求。

2.2.1 RxJava2.0原理

这篇文章写的非常详细。

2.3 MVP

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值