改进通用回调问题

时间:2015-08-18 16:49:46

标签: java android generics retrofit

我在我的Android应用程序中使用Retrofit并且有一个Response类来封装从API中的每个端点返回的标准响应格式。

public class Response<T> {

    public List<ResultFlags> resultFlags;
    public List<T> resultData;
    public List<SystemFlags> systemFlags;

}

我正在尝试创建一种通用的方法来创建可用于每个API调用的Retrofit Callback。我遇到的问题是某些端点有结果数据而有些端点没有。例如,在我的Retrofit服务类中,有一个调用,optimizeContacts有结果数据,另一个sendInvites没有。

@POST("/OptimizeContacts.php")
 void optimizeContacts(
        @Query("action") String action,
        @Query("campaign") String campaign,
        @Body OptimizeContactsParams params,
        Callback<Response<ArrayList<OptimizedContacts>>[]> callback
);

@POST("/SendInvites.php")
void sendInvites(
        @Query("action") String action,
        @Query("MSISDN") String msisdn,
        @Query(value="accessToken", encodeValue=false) String accessToken,
        @Query("campaign") String campaign,
        @Body ArrayList<ViralContact> contacts,
        Callback<Response[]> callback
);

因此,当我尝试创建一个方法来为端点返回Callback时,我无法找到支持Callback<Response<ArrayList<OptimizedContacts>>[]>Callback<Response[]>类型的方法。

这是我目前的方法。

protected static <P, R extends OttoBusBase> Callback<Response<P>[]> transactionCallbackWithPayload(final Class responseClass,
                                                                                                   final R event) {
    return new Callback<Response<P>[]>() {

        @Override
        public void success(Response<P>[] responses, retrofit.client.Response response) {
            onSuccessPayload(responseClass, event, responses, response);
        }

        @Override
        public void failure(RetrofitError error) {
            onFailure(responseClass, event, error);
        }
    };

}

我是否可以简单地处理Response<P>[]Response[]场景?我是否需要为每种返回类型创建两种方法?或者我可以用一种方法吗?

0 个答案:

没有答案