最近又在做环信,他的异步回调在子线程中,用起来不是很好用,恰好项目中用了RxJava就用RxJava来做一下线程切换吧.
/**
* Created by longforus on 2017/1/6 18:58.
* Description : 自定义的环信回调线程自动切换代理
*/
public class MyEmProxy<T> implements EMValueCallBack<T> {
private Action1<T> action1;
private Action1<Throwable> action2;
public MyEmProxy(Action1<T> action1) {
this.action1 = action1;
}
public MyEmProxy(Action1<T> action1, Action1<Throwable> action2) {
this.action1 = action1;
this.action2 = action2;
}
@Override
public void onSuccess(final T t) {
Observable.create(new Observable.OnSubscribe<T>() {
@Override
public void call(Subscriber<? super T> subscriber) {
subscriber.onNext(t);
subscriber.onCompleted();
}
}).subscribeOn(Schedulers.trampoline()).unsubscribeOn(Schedulers.trampoline())
.observeOn(AndroidSchedulers.mainThread()).subscribe(action1);
}
@Override
public void onError(final int i, final String s) {
if (action1 != null && action2 != null) {
Observable.create(new Observable.OnSubscribe<T>() {
@Override
public void call(Subscriber<? super T> subscriber) {
subscriber.onError(new MyEMException(s, i));
}
}).subscribeOn(Schedulers.trampoline()).unsubscribeOn(Schedulers.trampoline())
.observeOn(AndroidSchedulers.mainThread()).subscribe(action1, action2);
}
}
}
EMClient.getInstance().groupManager().asyncGetJoinedGroupsFromServer(new MyEmProxy<>(new Action1<List<EMGroup>>() {
@Override
public void call(List<EMGroup> emGroups) {
Log.i(TAG, "onSuccess: " + Thread.currentThread().getName());
initRv();
emptyLayout.showSuccess();
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
emptyLayout.showError();
}
}));
其他的子线程回调应该也可以这样来做的.