我想总是在我的Retrofit调用中添加一个参数。对于可以硬编码的值,我可以简单地使用
@POST("/myApi?myParam=myValue")
但是如果我要追加android.os.Build.MODEL
怎么办?
@POST("/myApi?machineName="+ Build.MODEL)
不起作用。能够将网络调用的这一部分从实现代码中抽象出来会很有用。
编辑
我可以使用添加Build.MODEL
到我的所有api调用中RequestInterceptor
。但是,它仍然使我无法选择如何将其选择性添加到我的某些api调用中,同时仍使用它RestAdapter
。
编辑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);
Build.MODEL
不能在注释中使用,因为无法在编译时解析。它仅在运行时可用(因为它是从属性加载的)。
有两种方法可以完成此操作。第一种是使用RequestInterceptor
您在问题中提到的。
第二种是@Query
在方法上使用参数。
@POST("/myApi")
Response doSomething(@Query("machineName") String machineName);
这要求您Build.MODEL
在调用API时通过。如果需要,可以将Retrofit接口包装在一个API中,该接口对为您执行此操作的应用程序层更友好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句