使用的接口:http://m.yunifang.com/yunifang/mobile/home
创建一个按钮进行点击执行
接口类:IInterface
import io.reactivex.Observable;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
/**
* Created by muhanxi on 17/12/4.
*/
public interface IInterface {
@GET("/yunifang/mobile/home")
Call get();
@GET("/yunifang/mobile/home")
Observable get1();
}
MainActivity:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import com.google.gson.Gson;
import org.reactivestreams.Subscription;
import java.io.IOException;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
import io.reactivex.BackpressureStrategy;
import io.reactivex.Flowable;
import io.reactivex.FlowableEmitter;
import io.reactivex.FlowableOnSubscribe;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.ObservableSource;
import io.reactivex.Observer;
import io.reactivex.Scheduler;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Action;
import io.reactivex.functions.BiFunction;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
zip1();
}
});
}
Disposable disposable = null;
private void onObserverable(){
//创建了一个被观察者
Observable observable = Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter e) throws Exception {
// e 发射器
//发送onnext事件
for(int i=0;i<100;i++){
// if(i == 50){
// disposable.dispose();
// }
e.onNext(""+i);
if(i == 50){
// e.onComplete();
// e.onError(new Exception("1"));
}
//只要执行了 onComplete onError , 后续在发送的onNext 事件, 再也无法接受
}
// e.onError(new Exception(""));
// e.onComplete();
}
});
//创建观察者
Observer observer = new Observer(){
@Override
public void onSubscribe(Disposable d) {
disposable = d ;
// 断开 被观察者和观察者之间的关系
// disposable.dispose();
// 判断 被观察者和观察者 之间是否还订阅关系
// disposable.isDisposed()
}
@Override
public void onNext(String s) {
//用于接受 被观察者所方法的事件
System.out.println("Observer s = " + s);
}
@Override
public void onError(Throwable e) {
//发生异常
System.out.println("onError s = " + e.getMessage());
}
@Override
public void onComplete() {
// 事件完成
System.out.println("onComplete s = ");
}
};
//订阅
observable.subscribe(observer);
}
private void test1(){
Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter e) throws Exception {
System.out.println("Observable " + Thread.currentThread().getName());
for(int i=0;i<1000;i++){
e.onNext(i+"");
}
System.out.println("Observable over " );
}
// subscribeOn 指定 被观察者所在的线程
}).subscribeOn(Schedulers.io())
// 指定 观察者所在的线程
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
System.out.println("Observer " + Thread.currentThread().getName());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(" "+ s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
private void test2(){
Flowable.create(new FlowableOnSubscribe() {
@Override
public void subscribe(FlowableEmitter e) throws Exception {
for(int i=0;i<1000;i++){
e.onNext(""+i);
}
}
}, BackpressureStrategy.LATEST)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer() {
@Override
public void accept(String s) throws Exception {
Thread.sleep(100);
System.out.println("Consumer " + s);
}
});
}
private void test3(){
Flowable.create(new FlowableOnSubscribe() {
@Override
public void subscribe(FlowableEmitter e) throws Exception {
e.onNext("onnext");
e.onError(new Exception("1"));
// e.onComplete();
}
},BackpressureStrategy.BUFFER)
// .subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer() {
@Override
public void accept(String s) throws Exception {
// onnext
System.out.println("Consumer onnext" + s);
}
}, new Consumer() {
@Override
public void accept(Throwable throwable) throws Exception {
// onerror
System.out.println("Consumer onerror" + throwable.getMessage());
}
}, new Action() {
@Override
public void run() throws Exception {
// onComplet
System.out.println("Consumer Action");
}
});
}
private void test4(){
Flowable.create(new FlowableOnSubscribe() {
@Override
public void subscribe(FlowableEmitter e) throws Exception {
e.onNext(1);
e.onError(new Exception(""));
}
},BackpressureStrategy.BUFFER).subscribe(new Consumer() {
@Override
public void accept(Integer integer) throws Exception {
System.out.println(" onNext");
}
}, new Consumer() {
@Override
public void accept(Throwable throwable) throws Exception {
System.out.println(" onError");
}
});
}
private void map(){
Flowable.create(new FlowableOnSubscribe() {
@Override
public void subscribe(FlowableEmitter e) throws Exception {
e.onNext("11");
}
},BackpressureStrategy.BUFFER)
.map(new Function() {
@Override
public Integer apply(String s) throws Exception {
return Integer.valueOf(s);
}
}).subscribe(new Consumer() {
@Override
public void accept(Integer integer) throws Exception {
System.out.println("integer = " + integer);
}
});
}
private void test5(){
Flowable.create(new FlowableOnSubscribe() {
@Override
public void subscribe(final FlowableEmitter e) throws Exception {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://m.yunifang.com")
.build();
IInterface iInterface = retrofit.create(IInterface.class);
iInterface.get().enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
try {
String result = response.body().string() ;
e.onNext(result);
} catch (IOException e1) {
e1.printStackTrace();
}
}
@Override
public void onFailure(Call call, Throwable t) {
}
});
}
},BackpressureStrategy.BUFFER)
.map(new Function() {
@Override
public Bean apply(String s) throws Exception {
Gson gson = new Gson();
return gson.fromJson(s,Bean.class);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer() {
@Override
public void accept(Bean bean) throws Exception {
}
});
}
private void flatMap(){
// Observable.create(new ObservableOnSubscribe() {
// @Override
// public void subscribe(final ObservableEmitter e) throws Exception {
//
// e.onNext("1");
// e.onNext("2");
//
//// Retrofit retrofit = new Retrofit.Builder()
//// .baseUrl("")
//// .build();
////
//// final IInterface iInterface = retrofit.create(IInterface.class);
////
//// iInterface.get().enqueue(new Callback() {
//// @Override
//// public void onResponse(Call call, Response response) {
////
//// try {
//// String result = response.body().string();
////
//// e.onNext(result);
////
////
////
//// } catch (IOException e) {
//// e.printStackTrace();
//// }
//
//
// }
//
// @Override
// public void onFailure(Call call, Throwable t) {
//
// }
// });
//
// }
// }).flatMap(new Function>() {
// @Override
// public ObservableSource apply(String s) throws Exception {
//
//
//
// ArrayList list = new ArrayList<>();
// for (int i=0;i<3;i++){
// list.add( s + " " + i);
// }
// return Observable.fromArray(list).delay(1, TimeUnit.SECONDS);
// }
// }).subscribe(new Consumer() {
// @Override
// public void accept(ArrayList arrayList) throws Exception {
//
//
// for (int i=0;i() {
@Override
public void onResponse(Call call, Response response) {
try {
String te = response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call call, Throwable t) {
}
});
}
private void concatMap(){
Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter e) throws Exception {
e.onNext(" 1");="" e.onnext("2");="" e.onnext("3");="" }="" }).concatmap(new="" function>() {
@Override
public ObservableSource apply(String s) throws Exception {
ArrayList list = new ArrayList<>();
for (int i=0;i<3;i++){
list.add( s + " " + i);
}
return Observable.fromArray(list).delay(1, TimeUnit.SECONDS);
// return null;
}
}).subscribe(new Consumer() {
@Override
public void accept(ArrayList arrayList) throws Exception {
for (int i=0;i observable = Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter e) throws Exception {
e.onNext(" 1");="" e.onnext("2");="" e.onnext("3");="" }="" });="" observable observable1 = Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter e) throws Exception {
e.onNext("A");
e.onNext("B");
e.onNext("C");
}
});
Observable.zip(observable, observable1, new BiFunction() {
@Override
public String apply(String s, String s2) throws Exception {
return s + s2;
}
}).subscribe(new Consumer() {
@Override
public void accept(String s) throws Exception {
System.out.println("s = " + s);
}
});
}
// rxjava 和retrofit 结合使用
private void zip1(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://m.yunifang.com")
.addConverterFactory(GsonConverterFactory.create())
// call 转化成 Observerable
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
IInterface iInterface = retrofit.create(IInterface.class);
iInterface.get1()
// 指定 被观察者 所在一个IO线程
.subscribeOn(Schedulers.io())
//指定观察者所在 住县城
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer() {
@Override
public void accept(Bean bean) throws Exception {
System.out.println("bean = " + bean.toString());
}
});
}
}