如何在收到一定数量的数据后调用 Web 服务并将其加载到表格视图中
Posted
技术标签:
【中文标题】如何在收到一定数量的数据后调用 Web 服务并将其加载到表格视图中【英文标题】:How to call web service after each certain number of data received and load it into table view 【发布时间】:2012-11-13 07:17:21 【问题描述】:我正在做一个项目,在第一次 Web 服务调用时,我们会获得大约 20 条数据,我们正在将这些数据加载到表格视图中,一旦我们开始向上滚动查看,当它达到 20 条时,我们需要调用服务接下来的 20 个没有,就像 facebook 一样。
我们需要为接下来的每 20 次执行此操作,直到数据结束并从上次调用的最后一个数据加载到 tableview,当我们向下滚动以查看以前的数据时,我们可以看到所有数据。当我们在第 20 个单元格之后向上滚动表格时需要显示“更多数据加载”。
请帮帮我!
谢谢,
【问题讨论】:
【参考方案1】:只需创建私有偏移变量并在每次成功加载时增加它。 假设这是您获取 GET 参数的 Web 服务:
http://server.com/?offset=0&amount=20
您的 Objective C 代码将如下所示:
在头文件中:
@interface YourClass
uint _offset;
@end
在实现文件中:
- (void)viewDidLoad
_offset = 0;
- (void)loadFromServer
NSString *stringURL = [NSString stringWithFormat:@"%@/%@", kServer, _offset];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:stringURL]];
NSString *params = [NSString stringWithFormat:@"offset=%i&amount=20", _offset];
NSData *postData = [params dataUsingEncoding:NSUTF8StringEncoding];
request.HTTPMethod = @"GET";
request.HTTPBody = postData;
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
if (error)
NSLog(@"Error: %@", error);
else
NSError *jsonError;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&jsonError];
_offset += 20;
];
【讨论】:
这仅用于获取服务器响应......这不是表格视图的问题,这意味着当我们需要调用服务时,当第 21 行出现时向上滚动...... 您可以阅读此主题:***.com/questions/4610299/… 或查看此主题:github.com/shiki/STableViewController【参考方案2】:添加UITableViewDelegate方法willDisplayCell
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *) cell forRowAtIndexPath:(NSIndexPath *)indexPath
int count = [yourDataSource count];;
if(indexPath.row == count - 1) // If going to display last row available in your source
//totalPageCount is the total pages available in the server. This needs to be stored on initial server call
//currentIndex is the index of page last retreived from server. This needs to be incremented every time new page is retreived.
if(currentIndex <= totalPageCount)
[self getContentsForPage:currentIndex];
else
self.tableView.tableFooterView = nil; //You can add an activity indicator in tableview's footer in viewDidLoad to show a loading status to user.
【讨论】:
以上是关于如何在收到一定数量的数据后调用 Web 服务并将其加载到表格视图中的主要内容,如果未能解决你的问题,请参考以下文章
如何将来自 .NET Web 服务的 DataSet 绑定到 android GridView?