Skip to content

Instantly share code, notes, and snippets.

@rezaiyan
Last active October 14, 2019 16:28
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rezaiyan/eecc55c35474c6e6d8b0763871650b89 to your computer and use it in GitHub Desktop.
Save rezaiyan/eecc55c35474c6e6d8b0763871650b89 to your computer and use it in GitHub Desktop.
Binding Observer with LiveData
public class BObserver<T> extends DisposableObserver<T> {
private StateLiveData<T> liveData;
public BObserver(StateLiveData<T> liveData) {
this.liveData = liveData;
}
@Override
protected void onStart() {
super.onStart();
liveData.postLoading();
}
@Override
public void onNext(T t) {
liveData.postSuccess(t);
}
@Override
public void onError(Throwable e) {
Error error = new Error(-1);
if (e instanceof HttpException) {
HttpException exception = (HttpException) e;
error.setCode(exception.code());
} else if (
e instanceof UnknownHostException ||
e instanceof SSLHandshakeException ||
e instanceof SocketTimeoutException) {
error.setCode(0);
error.setMessage("No internet connection");
}
liveData.postError(error);
}
@Override
public void onComplete() {
liveData.postComplete();
}
public class StateLiveData<T> extends MutableLiveData<StateData<T>> {
private StateData<T> stateData = new StateData<>();
public void postLoading() {
setValue(stateData.loading());
}
public void postError(Error error) {
setValue(stateData.error(error));
}
public void postSuccess(T data) {
setValue(stateData.success(data));
}
public void postComplete() {
setValue(stateData.complete());
}
}
vm.livedata.observe(this,response -> {
switch (response.getStatus()) {
case SUCCESS:
case ERROR:
case LOADING:
case COMPLETE:
}
});
StateLiveData<User> livedata = new StateLiveData<>();
Disposable disposable = repository.getUser()
.subscribeWith(BObserver<>(liveData));
compositeDisposable.add(disposable);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment