Skip to content

Instantly share code, notes, and snippets.

@HamedTaherpour
Created October 13, 2019 11:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save HamedTaherpour/7ab935c739d3fcf5d4423f47da4a39f2 to your computer and use it in GitHub Desktop.
Save HamedTaherpour/7ab935c739d3fcf5d4423f47da4a39f2 to your computer and use it in GitHub Desktop.
import android.util.Log;
import androidx.annotation.MainThread;
import androidx.annotation.NonNull;
import androidx.annotation.WorkerThread;
import com.google.gson.JsonObject;
import com.google.gson.stream.MalformedJsonException;
import java.io.IOException;
import java.net.SocketTimeoutException;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import khaneEghtesad.manym.Constants;
import khaneEghtesad.manym.R;
import khaneEghtesad.manym.app.base.AppController;
import retrofit2.HttpException;
/**
* Author: Hamed Taherpour
* *
* Created: 10/8/2019
*/
public abstract class CallWebService<T> {
private JsonObject jsonObject;
@MainThread
protected CallWebService() {
jsonObject = new JsonObject();
onResponseLoading();
fetchFromNetwork();
}
private void fetchFromNetwork() {
String json = getParameter(jsonObject).toString();
createCall(json).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<T>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(T response) {
onResponseResult(response);
}
@Override
public void onError(Throwable e) {
String message = getCustomErrorMessage(e);
onResponseError(message);
Log.i(Constants.TAG, "Error: WebService -> " + message);
onResponseDone();
}
@Override
public void onComplete() {
onResponseDone();
}
});
}
private String getCustomErrorMessage(Throwable error) {
if (error instanceof SocketTimeoutException) {
return AppController.getAppContext().getString(R.string.requestTimeOutError);
} else if (error instanceof MalformedJsonException) {
return AppController.getAppContext().getString(R.string.responseMalformedJson);
} else if (error instanceof IOException) {
return AppController.getAppContext().getString(R.string.networkError);
} else if (error instanceof HttpException) {
return (((HttpException) error).response().message());
} else {
return AppController.getAppContext().getString(R.string.unknownError);
}
}
@WorkerThread
protected abstract void onResponseResult(T data);
protected abstract void onResponseLoading();
protected abstract void onResponseError(String message);
protected abstract void onResponseDone();
@MainThread
protected abstract JsonObject getParameter(JsonObject jsonObject);
@NonNull
@MainThread
protected abstract Observable<T> createCall(String json);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment