Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用RoboSpice将多个Web服务聚合为一个响应_Android_Robospice - Fatal编程技术网

Android 使用RoboSpice将多个Web服务聚合为一个响应

Android 使用RoboSpice将多个Web服务聚合为一个响应,android,robospice,Android,Robospice,我刚开始用替换我自己的网络请求代码,结果遇到了一个拦截器。我需要做的是发出一个返回json的请求,这个json然后给我X多个新的url:s,我需要从中加载额外的数据以完成请求 我更愿意这样做,从片段的角度来看,它只是一个请求,当我从上下文中解释它时,它以某种方式支持这一点 “支持不同web服务的聚合” 有没有人做过类似的事情,想给我一些关于如何做到这一点的信息 或者:有人知道我是否可以启动一个spiceRequest,然后在spiceService中处理时启动X多个新的spiceRequests

我刚开始用替换我自己的网络请求代码,结果遇到了一个拦截器。我需要做的是发出一个返回json的请求,这个json然后给我X多个新的url:s,我需要从中加载额外的数据以完成请求

我更愿意这样做,从片段的角度来看,它只是一个请求,当我从上下文中解释它时,它以某种方式支持这一点

“支持不同web服务的聚合”

有没有人做过类似的事情,想给我一些关于如何做到这一点的信息


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

因为似乎没有人有好的方法来实现这一点,我正在添加我的解决方案(不是最好的),以防其他人有类似的需要

Im子类化SpringAndroidSpiceRequest,在loadDataFromNetwork()中,我得到RestTemplate,只需发出x多个请求并将它们合并,然后返回合并后的数据作为请求的结果

当我找到更好的方法时,我会替换这段代码,但现在它可以完成任务

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;
    }
}
公共类LargeSpiceRequest扩展了SpringAndroidPiceRequest{
私人字符串mUrl;
公共慷慨请求(字符串url){
超级(大响应类);
mUrl=url;
}
@凌驾
public LargeResponse loadDataFromNetwork()引发异常{
RestTemplate RestTemplate=getRestTemplate();
ResponseEntity LargeResponseEntity=restTemplate.exchange(URI.create(mUrl),HttpMethod.GET,null,LargeResponse.class);
LargeResponse LargeResponse=largeResponseResponseEntity.getBody();
ArrayList subRequests=largeResponse.getSubRequests();
for(子请求子请求:子请求){
试一试{
字符串url=subRequest.getUrl();
ResponseEntity subRequestResponseEntity=restTemplate.exchange(URI.create(url)、HttpMethod.GET、null、SubRequestResponse.class);
SubRequestResponse SubRequestResponse=subRequestResponseEntity.getBody();
//将某些响应与较大响应合并
largeResponse.mergin(子请求响应);
}捕获(RestClientException e){
//如果你愿意的话,处理这个
}
}
//合并的LargerResponse将存储在缓存中
回复较大;
}
}

好的,如果只需要两个服务怎么办?好的,听起来很粗糙,但是如果你有几个端点,你应该一直重新启动你的服务。在某些情况下,它不起作用。
因此,如果您有两个端点,请考虑两个Robospice服务实例。你觉得怎么样?

你做这件事的方式很好。只有一点:永远不要捕捉异常,什么都不做。至少,记录例外情况,否则就像剪断你坐的树枝,它会导致神秘的错误,你将无法发现和解决。自我接受你的答案,这是值得的。这只是演示代码来说明我如何“解决”它,真正的实现有正确的错误处理。