使用 Retrofit 和 RXJava 的多个请求

Dav*_*kro -1 java android rx-java retrofit

我有一个名为verifyData的服务。我需要多次调用此服务。

  • 改造2
  • RXJava

服务

@FormUrlEncoded
   @POST("verifyData")
   Observable<Adeudos> Adeudos(
           @Field("id") int id_user    
   );
Run Code Online (Sandbox Code Playgroud)

简单调用

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) {

                     }
                 });
Run Code Online (Sandbox Code Playgroud)

我需要使用这个数组来执行这个“方法”

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

解决方案

添加retrolambda在我的gradle产出

爪哇

 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");
                   }
               });
Run Code Online (Sandbox Code Playgroud)

Ale*_*yev 5

如果要进行顺序调用,请使用 .concatMap

    Observable.from(ids)
            .concatMap(s -> services.verifyData(Integer.parseInt(s)))
            //subscription
Run Code Online (Sandbox Code Playgroud)

如果您想要并行调用,请使用flatMap()带有maxConcurrent参数的a

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

因此,它会id从您的列表中创建流并对其进行修改以进行 api 调用。

  • 使用 retrolambda 或匿名类 (2认同)