改造 - 使用相同的密钥发送动态查询

时间:2017-08-07 18:11:10

标签: java android retrofit retrofit2

这是我的界面:

 public interface ServerCalls{
        @GET
        Call<List<Integer>> searchNames(@Url String url, @QueryMap Map<String, 
        String> options);
    }
 }

这是我的电话:

    APIs.LoadDataService service = 
        retrofit.create(APIs.LoadDataService.class);
        Map<String, String> parameters = new HashMap<>();
        parameters.put("name","yoni");
        parameters.put("name","albert");
        parameters.put("q","text");
        Call<List<Integer>> call = service.searchNames(APIs.GET_NAMES, parameters);

使用动态查询进行调用我需要使用@QueryMap,这意味着我需要使用一些Map。 我的问题是当我需要发送相同的密钥时,因为Map始终是key的最后一个值而不支持重复。

我的api需要得到类似的东西:

myapi.com/getLastName?name=yoni&name=albert

我该怎么办? (没有番石榴库)

2 个答案:

答案 0 :(得分:3)

您可以使用@Query("name") List<String> names

示例:

public interface Api {
    @GET("/getLastName")
    Call<ResponseBody> getLastName(@Query("name") List<String> names,
                                   @QueryMap Map<String, String> otherUniqueKeys);
}

List<String> names = new ArrayList();
names.add("yoni");
names.add("albert");

// create an instance of Api interface with retrofit
Api api = ...
api.getLastName(names).enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {

    }

    @Override
    public void onFailure(Call<ResponseBody> call, Throwable t) {

    }
});

有关this链接的更多详情。

答案 1 :(得分:0)

像这样制作界面

 @POST
 Call<Response> dynamicCall(
        @Url String url,
        @Body Object object);

用法:

dynamicCall(url,Object);

我希望这会对你有所帮助。