改进:@GET命令中的多个查询参数?

我正在使用Retrofit和Robospice在我的Android应用程序中进行API调用。 所有的@POST方法工作的很好,在URL中没有任何参数的@GET命令也是如此,但是我不能得到任何@GET调用来处理结尾的参数!

例如,如果我的APIpath是“my / api / call /”,并且我需要URL中的两个参数“param1”和“param2”,get调用将如下所示:

http://www.example.com/my/api/call?param1=value1¶m2=value2

所以我已经设置了我的@GET界面,如下所示:

@GET("/my/api/call?param1={p1}&param2={p2}") Response getMyThing(@Path("p1") String param1, @Path("p2") String param2); 

但我得到一个错误说
“请求networking执行期间发生exception:对方法getMyThing的URL查询string” /my/api/call?param1={p1}&param2={p2} “可能没有replace块。

我究竟做错了什么?

你应该使用这个语法:

 @GET("/my/API/call") Response getMyThing( @Query("param1") String param1, @Query("param2") String param2); 

在URL中指定查询参数仅用于知道键和值的情况,而且它们是固定的。

如果你有一堆的GET参数,另一种方式将它们传递到你的url是一个HashMap。

 class YourActivity extends Activity { private static final String BASEPATH = "http://www.example.com"; private interface API { @GET("/thing") void getMyThing(@QueryMap Map<String, String>, new Callback<String> callback); } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); RestAdapter rest = new RestAdapter.Builder().setEndpoint(BASEPATH).build(); API service = rest.create(API.class); Map<String, String> params = new HashMap<String, String>(); params.put("foo", "bar"); params.put("baz", "qux"); // ... as much as you need. service.getMyThing(params, new Callback<String>() { // ... do some stuff here. }); } } 

所调用的URL将是http://www.example.com/thing/?foo=bar&baz=qux

不要在GET-URL中编写查询参数。 像这样做:

 @GET("/my/api/call") Response getMyThing(@Query("param1") String param1, @Query("param2") String param2);