2014-03-28 59 views
2

我剛開始用RoboSpice替換我自己的網絡請求代碼,並遇到阻塞程序。我需要做的是做一個請求,將返回一個JSON,這個JSON然後給我X許多新的url:S,我需要加載額外的數據,以完成請求。使用RoboSpice將多點web服務集成到一個響應中

我寧願這樣做,以便從碎片的角度來看,它只是一個spiceRequest,並且我從RoboSpice GitHub page解釋它支持這種方式。

「支持不同的網絡服務聚合」從RoboSpice GitHub page

有沒有人做過類似的東西,想給我如何實現這一目標的一些信息?

或者:有誰知道,如果我可以開始一個spiceRequest而在spiceService正在處理然後啓動X了許多新的spiceRequests,我猜RoboSpice不能合併在它自己的我的數據和做實際合併不是這裏的問題。重要的是,我仍然可以在後臺運行的spiceService中執行此操作,以便即使活動/碎片被刪除/重新創建,它也可以完成。

回答

2

由於沒有人似乎有一個很好的方式來實現這一目標,我添加了我的解決方案(不是最好的),以防其他人有類似的需求。我得到RestTemplate,並簡單地做出許多請求,並將它們合併到我自己,然後返回組合數據作爲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; 
    } 
} 
+0

你這樣做的方式很好。只要一點:永遠不要發現異常,不要做任何事情。至少,記錄異常情況,否則就像切斷你坐的分支一樣,這會導致你無法發現和解決的神祕錯誤。自我接受你的答案,這是值得的。 – Snicolas

+0

這只是演示代碼來說明我如何「解決」它,真正的實現具有適當的錯誤處理。 –

0

好吧,如果只是有兩個服務?好吧,聽起來很粗魯,但如果你有幾個端點,你應該隨時重新啓動你的服務。在幾種情況下,它不起作用。 因此,如果您有兩個端點考慮兩個Robospice服務實例。你怎麼看?

相關問題