我正在尝试将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个项目,所以我在这里做的是首先我在topStoriesID列表中存储500个项目ID。
然后我通过使用Skip()。Take()方法然后在这些ID上运行foreach循环来获取实际故事并将它们添加到ObservableCollection对象ro中。我一直这样做,直到lastItem达到500。
那么这段代码是否正确或是否有更好的方法来实现它?
感谢。