在Androïd中为动态路由实现通用的Retrofit接口

时间:2015-01-27 12:46:34

标签: java android retrofit

这个平台上的第一个问题,我希望你们能够对我的问题有所了解:)

我目前正在尝试使用非常整洁的Retrofit库来重构我的Androïd项目。虽然我已经在使用这个库的其他项目上有一些工作示例,但我试图进一步推动我的集成,以便我可以生成动态路由。

为此,我已经开始使用Retrofit对接口进行编码,如下所示:

public interface RestServices<T> {

@GET("{route_name}")
List<T> getObjects(@Path("route_name") String route, @QueryMap Map<String, String> options);

@GET("{route_name}/{id}")
T getObject(@Path("route_name") String route, @Path("id") String id, @QueryMap Map<String, String> options);

@POST("{route_name}")
T postObject(@Path("route_name") String route, @Body T object);

@PUT("{route_name}/{id}")
T putObject(@Path("route_name") String route, @Path("id") String id, @Body T object);

}

基本上这会调用我在我的应用程序中为每个服务使用的基本路由,并且我需要从此接口实现此接口的所有类,以便使用绑定到我的服务的模型的类名生成dyncamically路由。 / p>

public abstract class RestProviderImpl<T> extends RestProvider<RestServices<T>> {

protected abstract String getClassName();
protected abstract Class<RestServices<T>> getProvider();

protected String getMethod() {
    String className = getClassName();
    String res = TextUtils.join("_", className.split("(?=[A-Z])"));
    return res.substring(1).toLowerCase(Locale.getDefault());
}

protected String getPluralizedMethod() {
    return getMethod() + "s";
}

public List<T> getObjects(Map<String, String> options) {
    return getService(getProvider()).getObjects(getPluralizedMethod(), options);
}

public T getObject(String id, Map<String, String> options) {
    return getService(getProvider()).getObject(getPluralizedMethod(), id, options);
}

public T postObject(T object) {
    return getService(getProvider()).postObject(getPluralizedMethod(), object);
}

public T putObject(String id, T object) {
    return getService(getProvider()).putObject(getPluralizedMethod(), id, object);
}

}

从那时起,我将声明所有其他相关服务作为此接口的扩展。我可以将所有特定路由添加到这些services

public interface UserService extends RestServices<User> {}

但是我在Retrofit库中遇到了一个异常,说这是从另一个接口扩展的不安全(这基本上就是我想做的......)。

我想要实现的目标有什么问题吗?你能给我一些提示,以便我可以做类似的事吗?

提前致谢!

0 个答案:

没有答案