使用Retrofit 2将数组添加为请求参数

Fra*_*and 12 android retrofit retrofit2

我正在寻找方法在改装2 的GET请求中添加一个int数组(例如[0,1,3,5])作为参数.然后,生成的url应该是这样的:http:// server/service ?阵列= [0,1,3,5]

这该怎么做 ?

mrs*_*tif 13

您需要使用数组语法命名您的查询参数,如下所示:

@GET("http://server/service")
Observable<Void> getSomething(@Query("array[]") List<Integer> array);
Run Code Online (Sandbox Code Playgroud)

语法本身会因所使用的后端技术而异,但不包括括号“[]”通常会被解释为单个值。

例如, usingarray=1&array=2通常会被后端解释为 onlyarray=1array=2代替array=[1,2]

  • 对我不起作用。我得到的是 `https:/server/service?array[]=value1&amp;array[]=value2` (3认同)
  • 这正是你应该得到的@Przemo (2认同)
  • @mrstif我认为问题是关于获取“array=[1,2]”,而不是“array[]=value1&amp;array[]=value2”。 (2认同)

And*_*kin 12

只需将其添加为查询参数即可

@GET("http://server/service")
Observable<Void> getSomething(@Query("array") List<Integer> array);
Run Code Online (Sandbox Code Playgroud)

你也可以使用int []或Integer ...作为最后一个参数;

  • 我试过这个解决方案,但生成的url看起来像这样:http:// server/service?array = 0&array = 1&array = 3&array = 5但是我的情况我正在寻找一种方法来获取生成的url,看起来像这样HTTP://服务器/服务数组= [0,1,3,5] (12认同)

Fra*_*and 7

我终于通过使用 Arrays.toString(int []) 方法并通过删除此结果中的空格来建立解决方案,因为 Arrays.toString 返回“[0, 1, 3, 5]”。我的请求方法看起来像这样

@GET("http://server/service")
Observable<Void> getSomething(@Query("array") String array);
Run Code Online (Sandbox Code Playgroud)


jar*_*ora 5

我遇到了类似的问题,必须做一些事情才能达到可接受的形式(如问题中所要求的)。

  1. 将 ArrayList 转换为字符串

    arrayList.toString().replace(" ", "")
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在 RetroFit 方法中,我将接受上面的 ArrayList 的 Query 参数更改为如下:

    @Query(value = "cities", encoded = true)
    
    Run Code Online (Sandbox Code Playgroud)

这可确保括号和逗号不经过 URL 编码。