Retrofit2和RxJava2的使用介绍一

这次是代码加注释版,Retrofit2和Rxjava2的单独使用,之前有单独的博客分析,这一篇主要是讲一个简单的Demo,将这两货联合使用

先看依赖

    compile 'com.squareup.retrofit2:retrofit:2.2.0'
    compile 'com.squareup.retrofit2:converter-gson:2.2.0'
    compile 'com.google.code.gson:gson:2.8.0'
    compile 'com.jakewharton:butterknife:8.5.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'io.reactivex.rxjava2:rxjava:2.0.8'
    compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'

请忽略其中的黄油刀。。。

然后还需要网络权限


我简单说一下这个Demo,我没有用到UI的任何操作,就是一个默认的xml

直接看代码

package com.tyran.rxjava_retrofit_demo1;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import java.util.List;

import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.http.GET;

/**
 * RxJava2 And Retrofit2
 * 把思路先理一下,RxJava2作为异步传输队列,将Retrofit2从网络获取的信息,从IO线程(网络请求)发送到UI线程(主线程)
 * 1、Retrofit2作为Observable(被观察者/发送方)
 * 2、提供一个在主线程运行的Observer(观察者/接收方)
 * 3、通过内部接口连接注册,
 */

public class MainActivity extends AppCompatActivity {

    Retrofit retrofit;
    WashService washService;
    Observable washObservable;
    CompositeDisposable compositeDisposable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //这是一个控制观察者主动与被观察连接的内置控制类
        compositeDisposable = new CompositeDisposable();
        //初始化
        InitRetrofit();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //activity销毁的时候,切断所有联系
        compositeDisposable.clear();
    }

    private void InitRetrofit() {
        //开始初始化Retrofit
        retrofit = new Retrofit.Builder()
                .baseUrl("http://cloud.bmob.cn/")
                //收到的内容自动转化为一个GsonFormat生成的类
                .addConverterFactory(GsonConverterFactory.create())
                //添加一个RxJava2的adapter
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
        //实例化Retrofit2的请求接口
        washService = retrofit.create(WashService.class);
        //通过接口就可以请求到数据
        washObservable = washService.washCall();
        //绑定观察者和被观察者,当绑定之后,就会发送Retrofit2所请求到的数据到Observer
        InitRxJava2(new Observer() {

            @Override
            public void onSubscribe(Disposable d) {
                //把切断管道的控制器发送给总控制器
                compositeDisposable.add(d);
            }

            @Override
            public void onNext(GsonWash gsonWash) {
                List washInfo = gsonWash.getWashInfo();
                Log.d("MainActivity", "GetData At " + Thread.currentThread().getName());
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });
    }

    //这里就是绑定观察者和被观察者的操作
    private void InitRxJava2(Observer washObserver) {
        washObservable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(washObserver);
    }

    interface WashService {
        @GET("d9f6840be6bb07cf/wash_test?clive=wash")
        //如果这里需要嵌套Rxjava2的话,返回的就应该是一个被观察者
        Observable washCall();
    }
}


你可能感兴趣的:(Retrofit2和RxJava2的使用介绍一)