为什么改造重新排序我的QueryMap参数?

时间:2015-07-31 05:33:04

标签: android retrofit github-api

我正试图像这样查询github api ......

https://api.github.com/search/repositories?q=created:>=2015-07-11&sort=stars&order=desc&perpage=25&page=1

这是我的GET

    @GET("/search")
    public void getTrending(@QueryMap Map<String,String> filters,Callback<GitResponse> response);

以下是我如何设置查询Map ...

    Map<String,String> searchFilters = new HashMap<>();
    searchFilters.put("created>","2015-07-11");
    searchFilters.put("sort","stars");
    searchFilters.put("order","desc");
    searchFilters.put("perpage","25");
    searchFilters.put("page", "1");


   api.getTrending(Collections.unmodifiableMap(searchFilters), new Callback<GitResponse>() {
       @Override
       public void success(GitResponse gitResponse, Response response) {
           Log.e("tag",response.toString());
       }

       @Override
       public void failure(RetrofitError error) {
           Log.e("tag",error.toString());
       }
   });

这是通过改造格式化的网址。

https://api.github.com/search/repositories?order=desc&created&GT; = 2015年7月11日&安培; perpage = 25安培;排序=分&安培;页= 1

请注意,不保留参数的顺序。我需要created >=作为查询正常工作的第一个参数。我尝试使用Collections.unmodifiableMap(),但这没有帮助。在retrofit docs中,他们使用的是番石榴ImmutableMap.of()。我是否必须使用番石榴来保留订单?

2 个答案:

答案 0 :(得分:9)

问题根本与改造无关。您有浮动订单,因为java.util.HashMap并不保证订单。您应该使用LinkedHashMap来获取固定元素顺序。

你最好知道哈希映射是如何工作的。

答案 1 :(得分:1)

也许我来晚了,但无论如何...:)

命名参数的要点是顺序无关紧要。如果这很重要,则服务器有故障。 您的主要问题似乎是未“创建”参数名称。是“ q”。价值的“创造”部分。