RxJava优点:异步,逻辑简洁。
//被观察者创建
Observer<String> observer = new Observer<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String str) {
Log.i("被观察者回调",str);
}
};
//被观察者Observer抽象类的实现类
Subscriber<String> subscriber = new Subscriber<String>() {
@Override
public void onStart() {
super.onStart();
}
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String s) {
Log.i("被观察者回调",s);
}
};
//观察者,oncreate创造基本的事件序列
Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("第一次");
subscriber.onNext("第二次");
subscriber.onNext("第三次");
subscriber.onCompleted();
}
});
//创建事件序列
Observable justObsevable = Observable.just("hello", "world", "!!!");
//创建事件序列
String[] strs = new String[]{"你好","我好","大家好"};
Observable fromObsevable = Observable.from(strs);
Action1 onNextAction = new Action1() {
//onNext()
@Override
public void call(Object o) {
}
};
Action1<Throwable> onErrorAction = new Action1<Throwable>() {
//onEorr
@Override
public void call(Throwable o) {
}
};
Action0 action = new Action0() {
//comepelete()
@Override
public void call() {
Log.i("comepelete","c");
}
};
//订阅,多个观察者不能同时订阅一个被观察者
observable.subscribe(subscriber);
justObsevable.subscribe(observer);
Observable.from(strs).subscribe(new Action1<String>() {
@Override
public void call(String s) {
Log.i("匿名观察者", s);
}
});
//订阅,多个观察者不能同时订阅一个被观察者
observable.subscribe(subscriber);
justObsevable.subscribe(observer);
//图片的显示
Observable.create(new Observable.OnSubscribe<Drawable>() {
@Override
public void call(Subscriber<? super Drawable> subscriber) {
Drawable drawable = getResources().getDrawable(R.mipmap.ic_launcher);
subscriber.onNext(drawable);
subscriber.onCompleted();
}
}).subscribeOn(Schedulers.io())//事件产生在子线程
.observeOn(AndroidSchedulers.mainThread())//事件消费在主线程
.subscribe(new Action1<Drawable>() {
@Override
public void call(Drawable drawable) {
//imageView.setImageDrawable(drawable);
}
});
Observable.just("http://7xi38r.com1.z0.glb.clouddn.com/@/server_anime/goodsicons/goods01.jpg").map(new Func1<String, Bitmap>() {
@Override
public Bitmap call(String netPath) {
return getImageStream(netPath);
}
}).subscribe(new Action1<Bitmap>() {
@Override
public void call(Bitmap bitmap) {
imageView.setImageBitmap(bitmap);
}
});
}
//每个两秒执行一次操作
private void poll(){
Observable.interval(2, 2, TimeUnit.SECONDS).subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
Log.i("value i == ", (++i) + "");
}
});
}
private void pollOnce(){
//在两秒后执行一次
Observable.timer(2, TimeUnit.SECONDS).subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
Log.i("value i == ", (++i) + "");
}
});
}
//retrofit单独使用
public interface TaobaoIpService {
@GET("service/getIpInfo.php")
Call<GetIpInfoResponse> getIP(@Query("ip") String ip);
@FormUrlEncoded
@POST("service/getIpInfo.php")
Call<GetIpInfoResponse> postIP(@Field("ip") String ip);
}
public void request(){
Retrofit retrofit = new Retrofit.Builder().baseUrl(ENDPOINT).addConverterFactory(GsonConverterFactory.create()).build();
Call<GetIpInfoResponse> call = retrofit.create(TaobaoIpService.class).getIP("202.202.32.202");
call.enqueue(new Callback<GetIpInfoResponse>() {
@Override
public void onResponse(Response<GetIpInfoResponse> response, Retrofit retrofit) {
Log.i("数据", response.body().data.country);
}
@Override
public void onFailure(Throwable t) {
Log.i("报错", "throw");
}
});
}
//retrofit 结合 RxJava使用
public interface NetService {
@GET("service/getIpInfo.php")
rx.Observable<GetIpInfoResponse> getIP(@Query("ip") String ip);
}
/**
* doOnNext();在某次操作之前处理一些逻辑
*/
public void requestRxJava(){
Retrofit retrofit = new Retrofit.Builder().baseUrl(ENDPOINT)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create()).build();
NetService netService = retrofit.create(NetService.class);
rx.Observable<GetIpInfoResponse> observable = netService.getIP("202.202.32.202");
observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).doOnNext(new Action1<GetIpInfoResponse>() {
@Override
public void call(GetIpInfoResponse getIpInfoResponse) {
mTextView.setText("哈哈");
}
}).subscribe(new Subscriber<GetIpInfoResponse>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(GetIpInfoResponse getIpInfoResponse) {
mTextView2.setText(getIpInfoResponse.data.country);
}
});
}