Created
October 13, 2019 11:14
-
-
Save HamedTaherpour/7ab935c739d3fcf5d4423f47da4a39f2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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