RxBus使用过程中小问题还是很多的
例如 在离开页面后RxBus就要重新注册,或者在发送RxBus请求后代码报错了也会取消订阅,
今天遇到了RxBus无效的问题,排查原因因为报了数组越界后RxBus就自动取消订阅了
解决办法,重新订阅
private void getRxBus() {
rxSubscription = RxBus.getInstance().toObserverable(MessageEvent.class)
.subscribe(new SafeOnlyNextSubscriber<MessageEvent>() {
@Override
public void onNext(MessageEvent args) {
super.onNext(args);
int type = args.type;
if (type == MessageEvent.SELECTNUM_PULL_ANALYSIS) {
String leagueCode = (String) args.data;
group_childPos = args.group_childPos;
//分析数据
NetApi.getSelectNumAnalysis(getActivity(), true, LotteryEnum.TC_JCZQ.getLotteryId(), leagueCode, TransactionType.LIVE_SCORE_MATCHANALYSIS.getTransactionType(), jczqHomeChildBeanObserver);
}else if(type == MessageEvent.SELECT_PULL){
//为玩法的popwindow处理数据
int size = SingletonMixPullMap.getSize();
if (size < 2) {//单场
selectNumBottonPullView.setSelect1State();
selectNumBottonPullView.setSelectNum(String.valueOf(size));
} else {//串
int muti=selectNumBottonPullView.getMuti();
selectNumBottonPullView.setSelectMoreState();
selectNumBottonPullView.setSelectMoreData(LotteryUtils.calcCount(), LotteryHelper.getCalcLotteryPrize(muti));
/********处理串 玩法*********************/
String typeRule=size+"串1";
if(SingletonSelectNumPlayTypeList.getSize()==1) {//仅选择 1场 没有手动选择
List<String> l=new LinkedList<>();
l.addAll(SingletonSelectNumPlayTypeList.getobjList());
if(l.get(0).substring(0,1).equals(String.valueOf(size-1))){
//如果选择的 是默认的上一条数据 则只保留更新最新数据
SingletonSelectNumPlayTypeList.clear();
}
}
SingletonSelectNumPlayTypeList.add(typeRule);
//之后点击popwindow更新了数据
}
}else if(type == MessageEvent.SELECT_PULL_SETDATA){//点击了串的过关方式
//还需要处理选择过关后的注数和奖金
String types=String.valueOf(args.data);
selectNumBottonPullView.setTypeChuan(types);
}
}
@Override
public void onError(Throwable e) {
super.onError(e);
getRxBus();//rxbus报错后 会自动取消订阅 在error重新订阅
}
});
}
在error里重新订阅