RxJava+Retrofit初体验(一)

RxJava火了有好长一段时间了,我想大多数了解的小伙伴都是看这篇文章的: 扔物线的给Android开发者的RxJava详解,Retrofit的话自从它出来就一直是很主流的网络请求框架官网的栗子,是从okhttp进化而来,这几个库的配合也是很常见。现在github上面好多的开源项目用的都是什么Rxjava+Retrofit+MVP这些骚框架,看见都害怕,瞬间感觉自己奥特了。就写了这么一个简单的接触这些的一个栗子github项目。####

首先配置依赖在build.gradle里面添加:######
   dependencies {
     compile 'com.squareup.okhttp3:okhttp:3.4.1'  //配置retrofit的时候配置基于okhttpclient
     compile 'com.squareup.retrofit2:retrofit:2.1.0
     compile 'io.reactivex:rxandroid:1.2.1'
     compile 'io.reactivex:rxjava:1.1.6'
     compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' //Rx和Retrofit配合使用必须添加此依赖
     compile 'com.squareup.retrofit2:converter-gson:2.1.0' //使用Gson自动解析,在retrofit进行配置
   }
开始写代码 定义请求接口(以retrofit的get请求为例去请求http://gank.io/api/day/history ):######
public interface GitHubService {
    @GET("api/day/history")
    Observable getDayInfo();//retrofit允许我们使用Rxjava,因此请求会给我们返回Observable对象
}
接下来我们要去配置retrofit网络请求了######
public class RetrofitManager {
    public static OkHttpClient client = null;
    public static Retrofit retrofit = null;
    public static final String BASE_URL = "http://gank.io/";
    public static GitHubService service = null;

    public static OkHttpClient getOkHttpClient(){//根据你自己的实际情况去进行配置,这里只是一个简单的配置
        if (client == null){ 
          client = new OkHttpClient().newBuilder()
          //.readTimeout(5000, TimeUnit.MILLISECONDS)
          .build();
         }
        return client;
    }

    public static Retrofit getRetrofit(){

       if (retrofit == null){
          retrofit = new Retrofit.Builder()
         .addConverterFactory(GsonConverterFactory.create())  //配置使用Gson进行解析,请求成功返回的结果不需要再用gson去解析,写好json bean之后会直接解析成bean,这就是之前依赖gson那个原因
         .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//这也是必须配置的,rx和retrofit使用才会兼容,不然会报错。
         .baseUrl(BASE_URL)
         .client(getOkHttpClient()) //将配置的client添加进来
         .build();
      }
      return retrofit;
   }

   public static GitHubService getService(){

       if (service == null) {
           service = getRetrofit().create(GitHubService.class); //获取GitHubService 
        }
      return service;
   }
}
最后我们要通过getService()方法得到GitHubService接口并且去调用网络请求的方法:######

我们在MainActivity中写了这么一个网络请求的方法:

 private void getDayInfoFromNet() {

    mSubscribe = RetrofitManager
                        .getService() //得到GitHubService接口
                        .getDayInfo() //调用getDayInfo方法
                        .subscribeOn(Schedulers.io()) //因为它返回的是一个observer对象我们就可以用Rx来处理了,异步操作放在io线程,内部是线程池实现
                        .observeOn(AndroidSchedulers.mainThread()) //subscribe的回调在主线程
                        .subscribe(new Subscriber() {

                         @Override
                         public void onStart() { //此方法是在订阅之前回调的,我们可以在里面处理一些简单的逻辑
                               super.onStart();
                               mProgressBar.setVisibility(View.VISIBLE);
                         }

                         @Override
                         public void onCompleted() {
                               mProgressBar.setVisibility(View.GONE);
                         }

                         @Override
                         public void onError(Throwable e) {
                              mProgressBar.setVisibility(View.GONE);
                         }

                         @Override
                         public void onNext(DayInfo dayInfo) { //成功之后我们会得到gson解析的bean
                               List datas = dayInfo.getResults();

                                    if (mAdapter == null) {

                                       mAdapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, datas);

                                    }
                           mListView.setAdapter(mAdapter);
                       }
         });
 }
完事儿后我们可以在onDestroty里面取消注册######
@Override
protected void onDestroy() {
    if (mSubscribe.isUnsubscribed()){
        mSubscribe.unsubscribe();
    }
}
效果图######
RxJava+Retrofit初体验(一)_第1张图片
simple.png
当然,我这个demo只是一个简单配合的请求,如果你的项目中遇到更多或者更复杂的你可以对请求进行封装,返回结果进行封装,万变不离其宗只要理解了他们怎么用我想那也不会是难事,希望可以和各位兄弟共同学习!!!######

你可能感兴趣的:(RxJava+Retrofit初体验(一))