这次是代码加注释版,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'
请忽略其中的黄油刀。。。
然后还需要网络权限
<uses-permission android:name="android.permission.INTERNET"/>
我简单说一下这个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<GsonWash> 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<GsonWash>() {
@Override
public void onSubscribe(Disposable d) {
//把切断管道的控制器发送给总控制器
compositeDisposable.add(d);
}
@Override
public void onNext(GsonWash gsonWash) {
List<GsonWash.WashInfoBean> 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<GsonWash> washObserver) {
washObservable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(washObserver);
}
interface WashService {
@GET("d9f6840be6bb07cf/wash_test?clive=wash")
//如果这里需要嵌套Rxjava2的话,返回的就应该是一个被观察者
Observable<GsonWash> washCall();
}
}