Skip to content
Snippets Groups Projects
Commit 55fc6400 authored by Jawnnypoo's avatar Jawnnypoo
Browse files

Create cool ResponseSubscriber

parent 708fbe85
No related branches found
No related tags found
No related merge requests found
Pipeline #
Loading
Loading
@@ -11,7 +11,6 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
 
import com.commit451.easycallback.HttpException;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.DividerItemDecoration;
Loading
Loading
@@ -20,6 +19,7 @@ import com.commit451.gitlab.api.GitLab;
import com.commit451.gitlab.model.api.Group;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.navigation.Navigator;
import com.commit451.gitlab.rx.ResponseSubscriber;
import com.commit451.gitlab.util.LinkHeaderParser;
 
import org.parceler.Parcels;
Loading
Loading
@@ -193,11 +193,23 @@ public class ProjectsFragment extends ButterKnifeFragment {
}
 
private void actuallyLoadIt(Observable<Response<List<Project>>> observable) {
observable
.compose(this.<Response<List<Project>>>bindToLifecycle())
observable.compose(this.<Response<List<Project>>>bindToLifecycle())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Response<List<Project>>>() {
.subscribe(new ResponseSubscriber<List<Project>>() {
@Override
protected void onNextSuccess(List<Project> response) {
mLoading = false;
mSwipeRefreshLayout.setRefreshing(false);
if (response.isEmpty()) {
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.no_projects);
}
mProjectsAdapter.setData(response);
mNextPageUrl = LinkHeaderParser.parse(getResponse()).getNext();
Timber.d("Next page url " + mNextPageUrl);
}
@Override
public void onCompleted() {
}
Loading
Loading
@@ -212,23 +224,6 @@ public class ProjectsFragment extends ButterKnifeFragment {
mProjectsAdapter.setData(null);
mNextPageUrl = null;
}
@Override
public void onNext(Response<List<Project>> response) {
if (!response.isSuccessful()) {
onError(new HttpException(response.raw()));
return;
}
mLoading = false;
mSwipeRefreshLayout.setRefreshing(false);
if (response.body().isEmpty()) {
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.no_projects);
}
mProjectsAdapter.setData(response.body());
mNextPageUrl = LinkHeaderParser.parse(response).getNext();
Timber.d("Next page url " + mNextPageUrl);
}
});
}
 
Loading
Loading
package com.commit451.gitlab.rx;
import retrofit2.Response;
import retrofit2.adapter.rxjava.HttpException;
import rx.Subscriber;
/**
* Subscriber that sends HTTP error codes into the {@link #onError(Throwable)}
* block, but also allows access to the Retrofit response. This is useful
* for cases where you do not need or want to still check {@link Response#isSuccessful()}
* but also would like to be able to access the Retrofit response in your success block (via {@link #getResponse()}
*/
public abstract class ResponseSubscriber<T> extends Subscriber<Response<T>> {
private Response response;
protected abstract void onNextSuccess(T response);
@Override
public void onNext(Response<T> response) {
this.response = response;
if (!response.isSuccessful()) {
onError(new HttpException(response));
} else {
onNextSuccess(response.body());
}
}
public Response getResponse() {
return response;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment