简体   繁体   中英

Multiple requests using Retrofit and RXJava

I have a service called verifyData . I need call this service N number of times.

  • Retrofit 2
  • RXJava

Service

@FormUrlEncoded
   @POST("verifyData")
   Observable<Adeudos> Adeudos(
           @Field("id") int id_user    
   );

Simple Call

Observable<Adeudos> respuesta = services.verifyData(1);
respuesta.subscribeOn(Schedulers.newThread())
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribe(new Subscriber<Adeudos>() {
                     @Override
                     public void onCompleted() {
                     }

                     @Override
                     public void onError(Throwable e) {

                     }

                     @Override
                     public void onNext(Adeudos adeudos) {

                     }
                 });

I need execute this "method" usign this array

List<String> ids = new ArrayList(); // 1,2,3,4,5,6,7

SOLUTION

Add retrolambda in my gradle

Java

 Observable.from(ids)
               .flatMap(s -> services.verifyData(ids).subscribeOn(Schedulers.newThread())
               .observeOn(AndroidSchedulers.mainThread())
               .subscribe(new Subscriber<Adeudos>() {
                   @Override
                   public void onCompleted() {
                       Log.e("Completed :"," Completed\n");    
                   }

                   @Override
                   public void onError(Throwable e) {
                       Log.e("SplashInteractorImpl :       ",e.getMessage()+"\n");

                   }

                   @Override
                   public void onNext(Adeudos adeudos) {
                        Log.e("SplashInteractorImpl :       ",adeudos.getMessage()+"\n");
                   }
               });

If you want to make sequential calls, use .concatMap

    Observable.from(ids)
            .concatMap(s -> services.verifyData(Integer.parseInt(s)))
            //subscription

If you want parallel calls, use a flatMap() with a maxConcurrent parameter

    Observable.from(ids)
            .flatMap(s -> services.verifyData(Integer.parseInt(s))
                    .subscribeOn(Schedulers.io()), maxConcurrent)
            //subscription

So it creates stream of id from your list and modifies it to make your api calls.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM