2

我刚开始用RoboSpice替换我自己的网络请求代码并遇到了一个阻止程序。我需要做的是发出一个返回 json 的请求,然后这个 json 给了我 X 很多新的 url:s,我需要从中加载额外的数据才能完成请求。

我更愿意这样做,以便从片段的角度来看,它只是一个 spiceRequest,当我从RoboSpice GitHub 页面解释它时,它以某种方式支持这一点。

RoboSpice GitHub 页面中的“支持不同 Web 服务的聚合”

有没有人做过类似的事情,并想给我一些关于如何实现这一目标的信息?

或者:有谁知道我是否可以启动一个 spiceRequest,然后在 spiceService 中进行处理时启动 X 个新的 spiceRequest,我猜 RoboSpice 无法自行合并我的数据,并且进行实际合并不是问题这里。重要的是,我可以在 spiceService 仍在后台运行时执行此操作,这样即使活动/片段被破坏/重新创建,它也可以完成。

4

2 回答 2

2

由于似乎没有人有实现这一目标的好方法,因此我添加了我的解决方案(不是最好的解决方案),以防其他人有类似的需求。

我继承了 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;
    }
}
于 2014-04-10T09:17:43.390 回答
0

好的,如果只有两个服务呢?好的,听起来很粗糙,但如果你有多个端点,你应该一直重启你的服务。在某些情况下,它不起作用。因此,如果您有两个端点,请考虑两个 Robospice 服务实例。你怎么看?

于 2015-07-08T08:46:10.713 回答