代码之家  ›  专栏  ›  技术社区  ›  TheMeanPanda

Java改进多请求一个响应

  •  0
  • TheMeanPanda  · 技术社区  · 8 年前

    大家好,我有一个只接受一个参数“name”的api端点: https://api.xxxxx.com/v1/test/ {名称}/

    我一直在提出多重请求 (例如。 https://api.xxxxx.com/v1/test/ALEX/ , https://api.xxxxx.com/v1/test/ELISA/ , https://api.xxxxx.com/v1/test/JOE/ )

    我需要在一个recyclerview中解析来自这3个调用的所有数据,每个请求位于不同的行中。

    我是否可以发出3个请求,然后得到1个JSON响应,这样我就可以解析它?实现这一目标的最佳方法是什么?

    2 回复  |  直到 8 年前
        1
  •  3
  •   Lukasz    8 年前

    我假设您在改型api接口中有如下代码

    @GET("v1/test/{name}/")
    Observable<UserModel> getUserBy(@Path("name") name) 
    

    然后在您的业务逻辑中,您可以调用。

    Observable.zip(retrofitApi.getUser("ALEX"), retrofitApi.getUser("ELISA"), retrofitApi.getUser("JOE"), (u1, u2, u3) -> {
      // prepare your returned users in a way suitable for further consumption
      // in this case I put them in a list
      return Arrays.asList(u1, u2, u3);
    })
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe( listOfUsers -> // TODO: do something with your users)
    

    希望这有帮助。

        2
  •  0
  •   Navneet Krishna    8 年前

    创建如下界面

    @FormUrlEncoded
    @POST("/locations/add.json")
    void sendMultipleLocations(@Query("token")String token, @FieldMap List<Map<String, String>> multipleLocations, Callback<String> callback);
    

    并使用Reform2的排队方法同时异步调用多个请求。此链接将帮助您

    https://github.com/square/retrofit/issues/1517