多个回调

时间:2013-08-17 14:20:19

标签: java callback


我需要用回调来调用该函数 该方法要求服务器回答并将其返回给回调 但是我需要向服务器发送下一个请求。

如何将内部方法的回调重新返回到主回调?

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 个答案:

答案 0 :(得分:0)

如果您确定希望此操作是同步/阻塞,则可以查看作为每个java Object一部分的wait和notify方法。在方法开始时,您只需创建一个空列表。

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仅由一个线程同时使用,因此您不需要任何同步。