在MVC中使用Retrofit 1.9,如何将路径固定数值设为动态参数?
解决Retrofit 1.9中接口动态路径参数的问题
没问题,我来帮你把接口里硬编码的固定值2改成动态可传入的参数,在Retrofit 1.9里实现这个非常简单,分两步就能搞定:
1. 修改接口定义,引入动态路径参数
你原来的接口把专辑ID写死成了2,现在我们用Retrofit的@Path注解来替换这个固定值,让它支持动态传入:
// 修改前的接口 @GET("/albums/2/photos") void getPhotosId(Callback<String> photos); // 修改后的接口 @GET("/albums/{albumId}/photos") void getPhotosId(@Path("albumId") int albumId, Callback<String> photos);
简单解释下:
- 把URL里的
2替换成占位符{albumId},这个名字可以自定义,但要和后面的注解名称对应 - 在方法参数里添加
@Path("albumId") int albumId,Retrofit会自动把你传入的专辑ID值替换到URL的对应位置上
2. 修改Controller中的调用代码
现在调用接口时需要传入你想要的专辑ID参数,比如你想获取ID为5的专辑照片,调用代码就改成这样:
// 修改后的调用(这里以传入ID=5为例) mApiManager.getPhotosApi().getPhotosId(5, new Callback<String>() { @Override public void success(String s, Response response) { Log.d(TAG, "JSON :: " + s); try { JSONArray array = new JSONArray(s); for (int i = 0; i < array.length(); i++) { // 你的JSON解析逻辑 } } catch (JSONException e) { e.printStackTrace(); } } @Override public void failure(RetrofitError error) { // 接口请求失败的处理逻辑 } });
额外小提示
- 如果你的专辑ID是字符串类型,只需要把
@Path注解后的参数类型改成String即可,URL占位符不需要修改 - 一定要保证
@Path("xxx")里的名称和URL中{xxx}的名称完全一致,否则Retrofit会抛出参数匹配错误
内容的提问来源于stack exchange,提问作者jason bran
相关产品推荐
相关产品推荐

