3

我正在构建一个 Android 应用程序,并且正在使用 Square 的 Retrofit 库进行短期网络调用。我对 Java 和 Android 比较陌生。到目前为止,我已经构建了这样的请求:

@GET("/library.php")
void library(
        @Query("one_thing") String oneThing,
        @Query("another_thing") String anotherThing,
        Callback<Map<String,Object>> callback
);

并这样称呼他们:

    service.library(oneThing, anotherThing, callback);

我需要实现一个接受可变数量参数的请求,不超过 10 个左右。必须单独定义它们并null为给定请求不存在的那些传递或传递一些东西是很麻烦的。有没有办法为请求定义一个接口,以便它接受变量编号或参数,并@Query为参数字典/映射中的每个元素自动构造 s?像这样的东西:

@GET("/library.php")
void library(
        Map<String,Object> parameters,
        Callback<Map<String,Object>> callback
);

service.library(parameters, callback);

提前感谢您的任何提示。

编辑:在这种情况下,为与请求无关的参数传递 null 将不起作用。理想情况下,我可以@Query根据参数字典设置/创建 s,这样@Query如果它们的值为空,键就不会变为 a。

编辑:我正在专门寻找一种适用于 GET 请求的解决方案。

4

2 回答 2

3

您总是可以尝试将参数作为 HTTP 正文传递,例如在此示例中(注意:我是作者)

但正如您所建议的,请使用带有您的值的 Map ,因此这可能对您有用:

@POST("/library.php")
public void library(@Body Map<String, Object> parameters, Callback<Map<String,Object>> callback);
于 2013-07-18T22:55:24.200 回答
3

有点晚了,但无论如何我都会发布它,以防万一有人在谷歌上发现同样的问题。

他们引入了注解@QueryMap

这个注解让你传递一个实现 Map 类的对象,不如 Post 请求那么好,让你传递一个对象作为参数,但它完成了工作。

@GET("/library.php")
public void library(@QueryMap Map<String, Object> parameters, Callback<Map<String,Object>> callback);
于 2014-03-07T12:51:00.837 回答