2013-08-17 72 views
0


我需要用回調調用該函數。
該方法要求服務器回答並將其返回給回調。
但我需要發送下一個請求到服務器。
多個回調

如何將內部方法的回調重新返回到主回調?

void getListOfRSSItems(final String url, final ResponseListener listener) { 
    Requester.send(url, new Requester.RequestResponseListener() { 
     @Override 
     public void onRequestResponse(HttpResponse response) { 
      ArrayList<RSSItem> list = getListFromResponse(response); 
      for (int i = 0; i < list.size(); i++) { 
       Requester.send(list.get(i).link, new Requester.RequestResponseListener() { 
        @Override 
        public void onRequestResponse(HttpResponse response2) { 
         // add content to rss item 
        } 
       }); 
       list.set(i, // returned rss item); 
      } 
      listener.onResponse(list); 
     } 
    }); 
} 

我該如何將rss項目返回到列表並將其返回給偵聽器?
這不等待添加內容代碼並返回沒有內容的RSSItem列表。

你能幫我嗎?

謝謝

+1

」這不等待添加內容代碼並返回沒有內容的RSSItem列表。「基於回調的方法的好處之一是,您不必等待響應以便從'getListOfRSSItems'返回。你的意思是你在'getListOfRSSItems'返回後檢查一些值,它沒有改變?如果是這樣,您可能只需稍等一會就可以調用回調。 –

回答

0

如果你確定要這個操作是同步/阻塞,你可以看看在等待,並通知其各Java對象的一部分方法。在你的方法開始時,你可以簡單地創建一個空列表。

final List<RSSItem> rssItems = new ArrayList<RSSItem>(); 
.... 
    @Override 
    public void onRequestResponse(HttpResponse response2) { 
    this.myClass.rssItems.add(...); // fill your list 

    YourClass.this.rssItems.notify(); // when finished wake blocking thread 
} 
.... 
rssItems.wait(5000); // waits until rssItems have been filled or 5s have passed. 
        // your program should be able to tell the difference. 

由於rssItems只被一個線程同時使用,所以不需要任何同步。 「