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アイテムをリストに戻し、リスナーを介して返すにはどうすればよいですか?
これは、コンテンツ コードの追加を待機せず、コンテンツのない RSSItems のリストを返します。

手伝って頂けますか?

ありがとうございました

4

1 に答える 1

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 は同時に 1 つのスレッドによってのみ使用されるため、同期は必要ありません。

于 2013-08-17T16:01:24.213 に答える