我刚刚开始用 RoboSpice 替换我自己的网络请求代码并遇到了拦截者。我需要做的是发出一个返回 json 的请求,然后这个 json 给我 X 个新的 url:s,我需要从中加载额外的数据才能完成请求。
我更愿意这样做,这样,从 fragment 的角度来看,它只是一个spiceRequest,正如我从RoboSpice GitHub page解释它一样。它以某种方式支持这一点。
“支持不同 Web 服务的聚合”来自 RoboSpice GitHub page
有没有人做过类似的事情并愿意给我一些关于如何实现这一目标的信息?
或者:有谁知道我是否可以启动一个 SpiceRequest,然后在 SpiceService 中处理时启动 X 个新的 SpiceRequest,我猜 RoboSpice 无法自行合并我的数据进行实际的合并不是这里的问题。重要的是,我可以在后台运行的 SpiceService 中执行此操作,这样即使 Activity/fragment 被销毁/重新创建,它也能完成。
最佳答案
由于似乎没有人有实现这一目标的好方法,因此我添加了我的解决方案(不是最好的解决方案),以防其他人有类似的需求。
我是 SpringAndroidSpiceRequest 的子类,在 loadDataFromNetwork() 中我得到了 RestTemplate 并简单地发出 x 个请求并将它们合并到我自己中,然后返回组合数据作为 SpiceRequest 的结果。
当我找到更好的方法时,我将替换此代码,但现在它可以完成工作。
public class LargeSpiceRequest extends SpringAndroidSpiceRequest<LargeResponse>{
private String mUrl;
public LargeSpiceRequest(String url) {
super(LargeResponse.class);
mUrl = url;
}
@Override
public LargeResponse loadDataFromNetwork() throws Exception {
RestTemplate restTemplate = getRestTemplate();
ResponseEntity<LargeResponse> largeResponseResponseEntity = restTemplate.exchange(URI.create(mUrl), HttpMethod.GET, null, LargeResponse.class);
LargeResponse largeResponse = largeResponseResponseEntity.getBody();
ArrayList<SubRequest> subRequests = largeResponse.getSubRequests();
for(SubRequest subRequest : subRequests){
try{
String url = subRequest.getUrl();
ResponseEntity<SubRequestResponse> subRequestResponseEntity = restTemplate.exchange(URI.create(url), HttpMethod.GET, null, SubRequestResponse.class);
SubRequestResponse subRequestResponse = subRequestResponseEntity.getBody();
// merge somethingResponse with largeResponse
largeResponse.mergeIn(subRequestResponse);
} catch (RestClientException e) {
// Handle this if you want
}
}
// the merged largeResponse will be stored in the cache
return largeResponse;
}
}
关于android - 使用 RoboSpice 将多个 Web 服务聚合到一个响应中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22714142/