我想总是在我的Retrofit调用中添加一个参数。对于我可以硬编码的值,我可以简单地使用
@POST("/myApi?myParam=myValue")
但如果我想追加android.os.Build.MODEL
怎么办?
@POST("/myApi?machineName="+ Build.MODEL)
不起作用。能够将这部分网络调用从实现代码中抽象出来是很有用的。
修改
我可以使用Build.MODEL
为我的所有api电话添加RequestInterceptor
。但是,如果仍然使用相同的RestAdapter
,我仍然无法选择性地将其添加到我的某些api调用中。
编辑2
修正了各种错误的标题。
编辑3
目前的实施:
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("myapi")
.setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(RequestInterceptor.RequestFacade request) {
request.addQueryParam("machineName", Build.MODEL);
}
})
.build();
API_SERVICE = restAdapter.create(ApiService.class);
答案 0 :(得分:7)
Build.MODEL
无法在注释中使用,因为它无法在编译时解析。它仅在运行时可用(因为它从属性加载)。
有两种方法可以实现这一目标。第一个是使用你在问题中提到的RequestInterceptor
。
第二个是在方法上使用@Query
参数。
@POST("/myApi")
Response doSomething(@Query("machineName") String machineName);
这要求您在调用API时传递Build.MODEL
。如果需要,可以将Retrofit界面包装在一个对应用程序层更友好的API中。