将绝对URL与Retrofit一起使用

Kay*_*n N 6 java android retrofit

我有一个我正在使用的HAL API,在很多情况下我需要将请求(使用不同的方法)发送到我从API返回的URL.这意味着我不想在我的改装api界面中硬编码URL的路径,但我想要的只是使用改造向该URL发送一个简单的请求.我现在正在使用Volley而且我知道我可以使用OkHttp来达到这个目的,但我想知道在Retrofit中是否有一种很好的方式来做这样的事情?

Kay*_*n N 23

最近Square发布了Retrofit v2.0.0 BETA,它内置了对动态URL的支持.即使图书馆处于测试阶段,根据Jake Wharton在DroidCon NYC 2015中告诉我们的情况,所有的api都是稳定的,不会改变.我个人将它添加到我的作品中,所以由你决定.

如果您决定进行升级,您会发现以下链接很有用:
Jake Wharton演示@DroidCon NYC 2015
关于变化的非常好的指南

简单来说,您现在可以在没有任何路径的情况下使用api注释(如@GET或@POST等),然后将@URL传递给方法将用于调用的api方法.

----------------改造1.x

我想出了一个很好的方法,并希望分享它.

诀窍是在创建RestAdapter时使用动态URL作为终点,然后在API接口上使用空路径.

我是这样做的:

public RestAdapter getHostAdapter(String baseHost){
    RestAdapter restAdapter = new RestAdapter.Builder()
            .setEndpoint(baseHost)
            .setRequestInterceptor(requestInterceptor)
            .build();

    return restAdapter;
}
Run Code Online (Sandbox Code Playgroud)

我使用这种方法构建我的restAdapter然后我在我的界面中有这个:(
如果你的URL添加了查询参数,这将不起作用.请参阅下一个答案以获得该案例的解决方案)

public interface General {
    @GET("/")
    void getSomething(Callback<SomeObject> callback);
}
Run Code Online (Sandbox Code Playgroud)

最后像这样使用它们:

getHostAdapter("YOUR_DYNAMIC_URL").create(General.class)
    .getSomething(new Callback<SomeObject>(){
        ...
    })
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.