java - 在 Retrofit 中使用绝对 URL

标签 java android retrofit

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

最佳答案

最近 Square 发布了 Retrofit v2.0.0 BETA并且它内置了对动态 URL 的支持。即使图书馆处于测试阶段,基于什么 Jake Wharton在 DroidCon NYC 2015 告诉我们,所有的 api 都是稳定的,不会改变。我亲自将它添加到我的作品中,所以这取决于你。

如果您决定进行升级,您会发现以下链接很有用:
Jake Wharton presentation @ DroidCon NYC 2015
A very good guide on the changes

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

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

我想出了一个很好的方法来做到这一点,并愿意分享它。

诀窍是在创建 RestAdapter 时使用动态 URL 作为端点,然后在 API 接口(interface)上有一个空路径。

这是我的做法:

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

    return restAdapter;
}

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

public interface General {
    @GET("/")
    void getSomething(Callback<SomeObject> callback);
}

最后像这样使用它们:

getHostAdapter("YOUR_DYNAMIC_URL").create(General.class)
    .getSomething(new Callback<SomeObject>(){
        ...
    })

希望对您有所帮助。

关于java - 在 Retrofit 中使用绝对 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28116395/

相关文章:

java - Hibernate三元关系和附加表

android - 我怎样才能像vimeo app一样从后台(Android)的url下载视频

android如何在canvas半透明上绘制位图

java - 创建jar而不用gradle编译

java - File.listFiles() 使用 JDK 6 破坏 unicode 名称(Unicode 规范化问题)

android - 表面 View 相机预览

java - jackson 不忽略 json 数组中的空对象

Android Retrofit RestAdapter 在断开连接时获得失败状态

android - Retrofit/Rxjava 和基于 session 的服务

java - spring boot中外键引用主键