RxBusはRxJava 1に基づく.xメッセージングメカニズムの実現
このセクションでは、RxJava 1について説明します.xのもう一つの特性.RxBusは、メッセージングメカニズムを実現します.
ネット上でRxBusについてRxJava 1.x上のパッケージは多いですが、呼び出しがまだ簡潔ではないと思い、自分でまた少しパッケージしました.
まず、appのmoduleにRxJava 1を導入する.xの依存:
次に、RxBusのメッセージ・メカニズム呼び出しクラスを作成します.コードは次のとおりです.
メッセージ伝達のキャリアRxDataに関し、modelであり、コードは以下の通りである.
主にこの2つのクラスに関連し、activityでどのように呼び出されるかを見てみましょう.
まずactivityはRxBusのCallBackインタフェースを実現し、以下のようにします.
次に、setListenerメソッドにRxBusを登録します.コードは次のとおりです.
activityによりRxBusが実現する.CallBackインタフェースは、データを受信するためのonCallBack(RxData data)メソッドを自動的に生成します.
次にactivityのデータがどのように発行され、受信されたかを見てみましょう.まず、発行コードを見てみましょう.ここでは、ボタンをクリックしてデータを送信する例を示します.
activityで受信したデータのコードを見てみましょう.
もちろん、実行が完了したら、activityのondestroyでログアウトすることを忘れないでください.
最後に実行した結果は次のとおりです.
Ok,BxBusについてRxJava 1.xの運用は今日ここまでです.ありがとうございます.
ネット上でRxBusについてRxJava 1.x上のパッケージは多いですが、呼び出しがまだ簡潔ではないと思い、自分でまた少しパッケージしました.
まず、appのmoduleにRxJava 1を導入する.xの依存:
//rxjava
compile 'io.reactivex:rxjava:1.2.7'//rx Android
compile 'io.reactivex:rxandroid:1.2.1'//rxjava
次に、RxBusのメッセージ・メカニズム呼び出しクラスを作成します.コードは次のとおりです.
package com.test.rxbus;
import rx.Observable;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers;
import rx.subjects.PublishSubject;
import rx.subjects.SerializedSubject;
import rx.subjects.Subject;
/**
* Created by Admin on 2017/5/19.
*
* RxBus
*
* RxJava1.x
*
* //rxjava
* compile 'io.reactivex:rxjava:1.2.7'//rx Android
* compile 'io.reactivex:rxandroid:1.2.1'//rxjava
*
*/
public class RxBus {
private final Subject bus;
private Subscription mSubscription;
private RxBus() {
bus = new SerializedSubject<>(PublishSubject.create());
}
/**
* RxBus
*
* @return
*/
private static class RxBusHolder {
private static final RxBus instance = new RxBus();
}
public static synchronized RxBus getInstance() {
return RxBusHolder.instance;
}
/**
*
*
* @param eventType
* @param
* @return
*/
private Observable toObserverable(Class eventType) {
return bus.ofType(eventType);
}
public interface CallBack{
void onCallBack(Object obj);
}
/**
* ,
*
* @param data
*/
public void post(RxData data) {
bus.onNext(data);
}
/***
* , ( setListener , button )
*/
public void register(final CallBack callBack){
mSubscription = RxBus.getInstance().toObserverable(RxData.class)
// io ,
.subscribeOn(Schedulers.io())
// , UI
.observeOn(AndroidSchedulers.mainThread())
//
.subscribe(new Action1() {
@Override
public void call(RxData data) {
if(callBack!=null){
callBack.onCallBack(data);
}
}
});
}
/***
* ,
*/
public void unRegister(){
if(mSubscription!=null&&!mSubscription.isUnsubscribed()){
mSubscription.unsubscribe();
}
}
}
メッセージ伝達のキャリアRxDataに関し、modelであり、コードは以下の通りである.
package com.test.rxbus;
import java.io.Serializable;
/**
* Created by Admin on 2017/5/19.
*/
public class RxData implements Serializable{
private int code;
private String message;
private T data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
主にこの2つのクラスに関連し、activityでどのように呼び出されるかを見てみましょう.
まずactivityはRxBusのCallBackインタフェースを実現し、以下のようにします.
public class MainActivity extends BaseActivity implements MainContract.View,View.OnClickListener,RxBus.CallBack{
次に、setListenerメソッドにRxBusを登録します.コードは次のとおりです.
@Override
protected void setListener() {
mBtnFinger.setOnClickListener(this);
// Rxbus
RxBus.getInstance().register(this);
}
activityによりRxBusが実現する.CallBackインタフェースは、データを受信するためのonCallBack(RxData data)メソッドを自動的に生成します.
次にactivityのデータがどのように発行され、受信されたかを見てみましょう.まず、発行コードを見てみましょう.ここでは、ボタンをクリックしてデータを送信する例を示します.
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.finger:
RxData data=new RxData();
data.setCode(0x1);
data.setMessage(" ");
data.setData(" ");
RxBus.getInstance().post(data);
LogUtil.e("====fashe====");
break;
default:
break;
}
}
activityで受信したデータのコードを見てみましょう.
@Override
public void onCallBack(Object obj) {
int code= ((RxData)obj).getCode();
String message= ((RxData)obj).getMessage();
String data= ((RxData)obj).getData().toString();
LogUtil.e("====code===="+code);
LogUtil.e("====message===="+message);
LogUtil.e("====data===="+data);
}
もちろん、実行が完了したら、activityのondestroyでログアウトすることを忘れないでください.
@Override
protected void onDestroy() {
// Rxbus
RxBus.getInstance().unRegister();
super.onDestroy();
}
最後に実行した結果は次のとおりです.
05-19 13:10:01.420 7983-7983/com.test E/pei: ====fashe====
05-19 13:10:01.421 7983-7983/com.test E/pei: ====code====1
05-19 13:10:01.421 7983-7983/com.test E/pei: ====message====
05-19 13:10:01.421 7983-7983/com.test E/pei: ====data====
Ok,BxBusについてRxJava 1.xの運用は今日ここまでです.ありがとうございます.