如何配置Square的Retrofit Client来处理具有可变数量参数的请求
我正在构建一个Android应用程序,并使用Square的Retrofit库进行短期网络调用。 我对Java和Android比较陌生。 到目前为止,我已经构建了这样的请求:
@GET("/library.php") void library( @Query("one_thing") String oneThing, @Query("another_thing") String anotherThing, Callback<Map> callback );
并称它们为:
service.library(oneThing, anotherThing, callback);
我需要实现一个接受可变数量参数的请求,不超过10个左右。 必须单独定义它们并为给定请求不存在的那些传递null
或其他东西是很麻烦的。 有没有办法为请求定义一个接口,以便它接受一个或多个变量参数,并为参数字典/映射中的每个元素自动构造@Query
? 像这样的东西:
@GET("/library.php") void library( Map parameters, Callback<Map> callback ); service.library(parameters, callback);
提前感谢任何提示。
编辑:为与请求无关的参数传递null在这种情况下不起作用。 理想情况下,我可以根据参数字典设置/创建@Query
,这样如果键值为null,键就不会成为@Query
。
编辑:我特意寻找适用于GET请求的解决方案。
您总是可以尝试将参数作为HTTP Body传递,例如在此示例中 (注意:我是作者)
但正如您所建议的那样,请使用带有您的值的Map,这样这可能对您有用:
@POST("/library.php") public void library(@Body Map parameters, Callback
这有点晚了,但我会发布它,以防有人在Google上发现同样的问题。
他们引入了Annotation @QueryMap
这个注释让你传递和实现Map类的对象,不像Post请求那样让你传递一个Object作为参数,但它完成了工作。
@GET("/library.php") public void library(@QueryMap Map parameters, Callback
- Gradle buildConfigField:数组和映射的语法?
- 具有自定义背景颜色的Android AlertDialog setMultiChoiceItems
- 如何创建我的上面的listview看起来更专业?
- 如何在没有Activity的情况下使用LocalBroadcastManager
- 如何使用ListActivity列出android中数据库的post?
- 如何花时间直到焦点在图像上拍摄而不是拍照?camera2API
- Android jobScheduler不会因jobFinished而停止(params,false)
- 如何将数据库写入android中的文本文件
- 从android轻松上传到S3