How to make multiple request and wait until data is come from all the requests in retrofit 2.0 - android

后端 未结 4 1243
南笙
南笙 2020-12-02 12:28

current code:

Retrofit retrofit = new Retrofit.Builder()
                  .baseUrl(Constant.BASEURL)
                  .addConverterFactory(GsonConverterFac         


        
4条回答
  •  南方客
    南方客 (楼主)
    2020-12-02 12:47

    If you don't mind adding one more dependency you could use RxAndroid. In particular, you should change your Service interface with something similar to this:

    @GET("/data")
    Observable getNewsData();
    

    Now, you can do this:

    Observable
                .range(0, **numberOfTimes**, Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .doOnError(new Action1() {
                    @Override
                    public void call(Throwable throwable) {
                        Log.e("error", throwable.toString());
                    }
                })
                .concatMap(new Func1>() {
                    @Override
                    public Observable call(Integer integer) {
                        Log.i("news", "nr:" + integer);
                        //Does the call.
                        return service.getNewsData(integer);
                    }
                }).concatMap(new Func1>() {
            @Override
            public Observable call(final ResponsWrapper responsWrapper) {
                return Observable.fromCallable(new Func0() {
                    @Override
                    public News call() {
                        //change the result of the call to a news.
                        return new News(responsWrapper.category,responsWrapper.title,null);
                    }
                });
            }
        }).toList().subscribe(new Action1>() {
            @Override
            public void call(List newList) {
               AdapterRecommendation adapter = new AdapterRecommendation(getApplicationContext(), newsList);
               listView.setAdapter(adapter);
            }
        });
    

    Just change numberOfTimes and it will work! Hope it helps.

    P.s. maybe there are cleaner ways to do this.

提交回复
热议问题