1

TopStories を hackernews API から ListView に取得しようとしています。無限スクロールが必要なので、ISupportIncrementalLoading インターフェイスを使用しています。以下は LoadMoreItemsAsync メソッドのコードです。

var httpClient = new HttpClient();
var response = await httpClient.GetAsync(new Uri("https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty"));
var json = await response.Content.ReadAsStringAsync();
List<string> topStoriesID = JsonConvert.DeserializeObject<List<string>>(json);
ObservableCollection<RootObject> ro = new ObservableCollection<RootObject>();

do
{
    var firstFewItems = (from topItemsID in topStoriesID
                         select topItemsID).Skip(lastItem).Take((int)count);
    foreach (var element in firstFewItems)
    {
        var itemResponse = await httpClient.GetAsync(new Uri("https://hacker-news.firebaseio.com/v0/item/" + element + ".json?print=pretty"));
        itemJson = await itemResponse.Content.ReadAsStringAsync();
        ro.Add(JsonConvert.DeserializeObject<RootObject>(itemJson));
        lastItem = (int)count;
        count = count + count;
    }
                    
 } while (lastItem != 500);

await coreDispatcher.RunAsync(CoreDispatcherPriority.Normal,
    () =>
    {
        foreach (var item in ro)
        {
            this.Add(item);
        }
     });
return new LoadMoreItemsResult() { Count = count };

コードを実行すると、エラーのない空白のページが表示されます。URL は 500 個のアイテムを返すので、ここで行っていることは、最初に 500 個のアイテム ID を topStoriesID リストに格納することです。

次に、Skip().Take() メソッドを使用して最初のいくつかのアイテム ID を取得し、この ID で foreach ループを実行して実際のストーリーを取得し、それらを ObservableCollection オブジェクト ro に追加します。lastItem が 500 に達するまでこれを続けます。

このコードは正しいですか、それともより良い実装方法はありますか?

4

0 に答える 0