改造:向接口添加运行时参数?

GDa*_*ger 5 android retrofit

我想总是在我的Retrofit调用中添加一个参数.对于我可以硬编码的值,我可以简单地使用

@POST("/myApi?myParam=myValue")
Run Code Online (Sandbox Code Playgroud)

但如果我想追加android.os.Build.MODEL怎么办?

@POST("/myApi?machineName="+ Build.MODEL)
Run Code Online (Sandbox Code Playgroud)

不起作用.能够将这部分网络调用从实现代码中抽象出来是有用的.

编辑

我可以Build.MODEL使用a 添加到我的所有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);
Run Code Online (Sandbox Code Playgroud)

Jak*_*ton 7

Build.MODEL不能在注释中使用,因为它无法在编译时解析.它仅在运行时可用(因为它从属性加载).

有两种方法可以实现这一目标.第一个是使用RequestInterceptor你在问题中提到的.

第二个是@Query在方法上使用参数.

@POST("/myApi")
Response doSomething(@Query("machineName") String machineName);
Run Code Online (Sandbox Code Playgroud)

这要求您Build.MODEL在调用API时传递.如果需要,可以将Retrofit界面包装在一个API中,该API对于为您执行此操作的应用程序层更友好.