1-) Android RMOS - retrofit2 Observable ile sıralı request yapma
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'io.reactivex.rxjava3:rxjava:3.0.0'
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
İNTERFACE
package com.ramazan.rmosposx.Grup.Kur;
import io.reactivex.rxjava3.core.Observable;
import retrofit2.http.Body;
import retrofit2.http.POST;
public interface KurService {
@POST("api/Kur/KurGetir")
Observable<KurModel> KurGetir(@Body KurRequest kurRequest);
}
SERVİCEGENARATOR.JAVA
package com.ramazan.rmosposx;
import com.ramazan.rmosposx.Departman.DepartmanModel;
import com.ramazan.rmosposx.Departman.DepartmanService;
import com.ramazan.rmosposx.Fis.FisModel;
import com.ramazan.rmosposx.Fis.FisModelRequest;
import com.ramazan.rmosposx.Fis.FisService;
import com.ramazan.rmosposx.Grup.GrupModel;
import com.ramazan.rmosposx.Grup.GrupService;
import com.ramazan.rmosposx.Grup.Kdv.KdvModel;
import com.ramazan.rmosposx.Grup.Kdv.KdvRequest;
import com.ramazan.rmosposx.Grup.Kdv.KdvService;
import com.ramazan.rmosposx.Grup.Kur.KurModel;
import com.ramazan.rmosposx.Grup.Kur.KurRequest;
import com.ramazan.rmosposx.Grup.Kur.KurService;
import com.ramazan.rmosposx.Grup.Recete.ReceteModel;
import com.ramazan.rmosposx.Grup.Recete.ReceteModelRequest;
import com.ramazan.rmosposx.Grup.Recete.ReceteService;
import com.ramazan.rmosposx.Grup.Satis.SatisRequest;
import com.ramazan.rmosposx.Grup.Satis.SatisResponse;
import com.ramazan.rmosposx.Grup.Satis.SatisService;
import com.ramazan.rmosposx.Grup.Urun.UrunModel;
import com.ramazan.rmosposx.Grup.Urun.UrunModelRequest;
import com.ramazan.rmosposx.Grup.Urun.UrunService;
import com.ramazan.rmosposx.Param.ParamModel;
import com.ramazan.rmosposx.Param.ParamService;
import com.ramazan.rmosposx.Posta.Masa.MasaModel;
import com.ramazan.rmosposx.Posta.Masa.MasaModelRequest;
import com.ramazan.rmosposx.Posta.Masa.MasaService;
import com.ramazan.rmosposx.Posta.PostaModel;
import com.ramazan.rmosposx.Posta.PostaService;
import com.ramazan.rmosposx.User.UserModel;
import com.ramazan.rmosposx.User.UserModelResponse;
import com.ramazan.rmosposx.User.UserService;
import java.util.concurrent.TimeUnit;
import io.reactivex.rxjava3.core.Observable;
import okhttp3.OkHttpClient;
import retrofit2.Call;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.http.Body;
public class ServiceGenerator {
public static Retrofit retrofit;
private static Retrofit.Builder builder;
private static OkHttpClient.Builder httpClient;
private static ServiceGenerator instance = new ServiceGenerator();
public static ServiceGenerator getInstance() {
return instance;
}
public Retrofit createService() {
builder = new Retrofit.Builder();
builder.baseUrl(Genel.webApiLink).addConverterFactory(GsonConverterFactory.create());
httpClient = new OkHttpClient().newBuilder()
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1, TimeUnit.MINUTES)
.writeTimeout(1, TimeUnit.MINUTES);
builder.client(httpClient.build());
builder.addCallAdapterFactory(RxJava3CallAdapterFactory.create());
retrofit = builder.build();
return retrofit;
}
private ServiceGenerator() {
Retrofit retrofit = createService();
userService = retrofit.create(UserService.class);
departmanService = retrofit.create(DepartmanService.class);
masaService = retrofit.create(MasaService.class);
fisService = retrofit.create(FisService.class);
receteService = retrofit.create(ReceteService.class);
urunService = retrofit.create(UrunService.class);
grupService = retrofit.create(GrupService.class);
paramService = retrofit.create(ParamService.class);
postaService = retrofit.create(PostaService.class);
satisService = retrofit.create(SatisService.class);
kdvService = retrofit.create(KdvService.class);
kurService = retrofit.create(KurService.class);
}
private UserService userService;
private DepartmanService departmanService;
private MasaService masaService;
private FisService fisService;
private ReceteService receteService;
private UrunService urunService;
private GrupService grupService;
private ParamService paramService;
private PostaService postaService;
private SatisService satisService;
private KdvService kdvService;
private KurService kurService;
public Observable<KurModel> KurGetir(@Body KurRequest kurRequest) {
return kurService.KurGetir(kurRequest);
}
public Observable<KdvModel> Kdv_Bul(KdvRequest kdvRequest) {
return kdvService.Kdv_Bul(kdvRequest);
}
public Call<SatisResponse> SatisYap(SatisRequest satisRequest) {
return satisService.SatisYap(satisRequest);
}
public Call<UserModelResponse> KullaniciGiris(UserModel userModel) {
return userService.KullaniciGiris(userModel);
}
public Call<DepartmanModel> TumDepartmanlar() {
return departmanService.TumDepartmanlar();
}
public Call<MasaModel> MasaPostaListesi(MasaModelRequest masaModel) {
return masaService.MasaPostaListesi(masaModel);
}
public Call<FisModel> YeniFisnoAL(FisModelRequest fisModelRequest) {
return fisService.YeniFisnoAL(fisModelRequest);
}
public Call<ReceteModel> ReceteGetir(ReceteModelRequest receteModelRequest) {
return receteService.ReceteGetir(receteModelRequest);
}
public Observable<UrunModel> UrunGetir(UrunModelRequest urunModelRequest) {
return urunService.UrunGetir(urunModelRequest);
}
public Call<GrupModel> AraGrupListesi(String depKodu) {
return grupService.AraGrupListesi(depKodu);
}
public Call<ParamModel> ParametreGetir() {
return paramService.ParametreGetir();
}
public Call<PostaModel> PostaListesi(String depKodu) {
return postaService.PostaListesi(depKodu);
}
}
ÖRNEK :
public void siparisVer() {
if (siparisModelList != null && siparisModelList.size() > 0) {
for (final SiparisModel siparisModel : siparisModelList) {
UrunModelRequest urunModelRequest = new UrunModelRequest();
urunModelRequest.setDepartmanKodu(Genel.dep_kod);
urunModelRequest.setReceteKodu(siparisModel.getReceteModel().getRecGenelkod()); // "1010121"
urunModelRequest.setTip("S");
Disposable disposable = ServiceGenerator.getInstance().UrunGetir(urunModelRequest)
.subscribeOn(Schedulers.io())
.flatMap((Function<UrunModel, ObservableSource<KurModel>>) response1 -> {
KurRequest kurRequest = new KurRequest();
kurRequest.setDepkodu(Genel.dep_kod);
kurRequest.setFolio("0");
kurRequest.setTarih(Genel.paramModel.getParamTarih());
urunModel = response1.getModel().get(0);
Observable<KurModel> kurModelObservable=ServiceGenerator.getInstance().KurGetir(kurRequest);
return kurModelObservable;
})
.flatMap((Function<KurModel, ObservableSource<KdvModel>>) response2 -> {
KdvRequest kdvRequest = new KdvRequest();
kdvRequest.setDepKodu(Genel.dep_kod);
kdvRequest.setReceteKodu(urunModel.getRecGenelkod());
Observable<KdvModel> kdvModelObservable=ServiceGenerator.getInstance().Kdv_Bul(kdvRequest);
return kdvModelObservable;
})
.map(response3 -> {
return response3;
})
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableObserver<KdvModel>() {
@Override
public void onNext(KdvModel response3) {
}
@Override
public void onError(Throwable e) {
Toast.makeText(mainActivity, "HATA "+e.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete() {
}
});
}
}
}