标签:
*****
/*
* 开始请求Web Service
*/
-(void)startRequest
{
指定请求的URL ?后面是请求参数,一般是开发者提供
NSString *strURL = [[NSString alloc] initWithFormat:@"http://www.51work6.com/service/mynotes/WebService.php?email=%@&type=%@&action=%@",@"<你的51work6.com用户邮箱>",@"JSON",@"query"];
将字符串编码为URL字符串 因为URL中不能有特殊字符
strURL = [strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:strURL];
创建请求
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
同步请求发送并接受数据 异步的方法,发送同步的请求
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSLog(@"请求完成...");
解析数据
NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
[self reloadView:resDict];
}
//重新加载表视图
-(void)reloadView:(NSDictionary*)res
{
NSNumber *resultCode = [res objectForKey:@"ResultCode"];
if ([resultCode integerValue] >=0)说明在服务器端操作成功
{
self.objects = [res objectForKey:@"Record"];
[self.tableView reloadData];
} else { 意味着ResultCode=-1;
NSString *errorStr = [resultCode errorMessage];NSNumber分类定义的方法,用于区分错误
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"错误信息"
message:errorStr
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles: nil];
[alertView show];
}
3 异步GET请求方法
NSURLConnection NSURLConnectiongDelegate 在请求的不同阶段会调用不同方法
方法:connection:didReceiveData:请求成功并建立连接
connection:didFailWithError:加载数据出现异常
connectionDidFinishLoading:成功完成数据加载
创建链接发送请求调用代理方法-接受数据-解析数据
/*
* 开始请求Web Service
*/
-(void)startRequest
{
NSString *strURL = [[NSString alloc] initWithFormat:@"http://www.51work6.com/service/mynotes/WebService.php?email=%@&type=%@&action=%@",@"<你的51work6.com用户邮箱>",@"JSON",@"query"];
strURL = [strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:strURL];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
创建链接发送请求
NSURLConnection *connection = [[NSURLConnection alloc]
initWithRequest:request
delegate:self];
if (connection) {
self.datas = [NSMutableData new];准备接收数据
}
}
#pragma mark- NSURLConnection 回调方法
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.datas appendData:data];
}
-(void) connection:(NSURLConnection *)connection didFailWithError: (NSError *)error {
NSLog(@"%@",[error localizedDescription]);
}
- (void) connectionDidFinishLoading: (NSURLConnection*) connection {
NSLog(@"请求完成...");
NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:self.datas options:NSJSONReadingAllowFragments error:nil];
[self reloadView:dict];
}
4 POST请求方法(异步)
关键是用NSMutableURLRequest类代替NSURLRequest
创建服务器URL-创建请求体-将请求体编码为请求参数-创建可变请求对象NSMutableURLRequest-创建链接调用代理方法
/*
* 开始请求Web Service
*/
-(void)startRequest
{
NSString *strURL = @"http://www.51work6.com/service/mynotes/WebService.php";
strURL = [strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:strURL];
请求体
NSString *post = [NSString stringWithFormat:@"email=%@&type=%@&action=%@", @"<你的51work6.com用户邮箱>",@"JSON",@"query"];
请求参数
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
创建请求设置内容
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:postData];
NSURLConnection *connection = [[NSURLConnection alloc]
initWithRequest:request
delegate:self];
if (connection) {
self.datas = [NSMutableData new];
}
}
#pragma mark- NSURLConnection 回调方法
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.datas appendData:data];
}
-(void) connection:(NSURLConnection *)connection didFailWithError: (NSError *)error {
NSLog(@"%@",[error localizedDescription]);
}
- (void) connectionDidFinishLoading: (NSURLConnection*) connection {
NSLog(@"请求完成...");
NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:self.datas options:NSJSONReadingAllowFragments error:nil];
[self reloadView:dict];
}
5 调用REST Web Service的插入 修改 删除方法
1)插入
使用POST请求传入数据再使用回调方法获取已经改好的数据
* 开始请求Web Service
*/
-(void)startRequest
{
//准备参数
NSDate *date = [NSDate new];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
当前的系统日期
NSString *dateStr = [dateFormatter stringFromDate:date];
//设置参数
NSString *post = [NSString stringWithFormat:@"email=%@&type=%@&action=%@&date=%@&content=%@",
@"<你的51work6.com用户邮箱>",@"JSON",@"add",dateStr,self.txtView.text];
NSString *strURL = @"http://www.51work6.com/service/mynotes/WebService.php";
strURL = [strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:strURL];
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:postData];
NSURLConnection *connection = [[NSURLConnection alloc]
initWithRequest:request delegate:self];
if (connection) {
_datas = [NSMutableData new];
}
}
#pragma mark- NSURLConnection 回调方法
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.datas appendData:data];
}
-(void) connection:(NSURLConnection *)connection didFailWithError: (NSError *)error {
NSLog(@"%@",[error localizedDescription]);
}
- (void) connectionDidFinishLoading: (NSURLConnection*) connection {
NSLog(@"请求完成...");
NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:self.datas options:NSJSONReadingAllowFragments error:nil];
NSString *message = @"操作成功。";
NSNumber *resultCodeObj = [dict objectForKey:@"ResultCode"];
if ([resultCodeObj integerValue] < 0) {
message = [resultCodeObj errorMessage];
}
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示信息"
message:message
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles: nil];
[alertView show];
}
2)删除
删除与查询是在同一个视图控制器中,需要做一些判断。
将请求Web Service的startRequest方法放到这里,可以保证每次改视图出现时都会请求服务器返回数据
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:YES];
action = QUERY;自定义枚举
[self startRequest];
}
删除方法是在表视图数据源方法实现的:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
//删除数据
action = REMOVE;
deleteRowId = indexPath.row;
开始在数据库中删除疏浚
[self startRequest];
} else if (editingStyle == UITableViewCellEditingStyleInsert) {
}
}
startRequest方法中需要判断请求动作标示
/*
* 开始请求Web Service
*/
-(void)startRequest {
NSString *strURL = @"http://www.51work6.com/service/mynotes/WebService.php";
strURL = [strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:strURL];
NSString *post;
if (action == QUERY) {//查询处理
post = [NSString stringWithFormat:@"email=%@&type=%@&action=%@", @"<你的51work6.com用户邮箱>",@"JSON",@"query"];
} else if (action == REMOVE) {//删除处理
NSMutableDictionary* dict = self.objects[deleteRowId];
post = [NSString stringWithFormat:@"email=%@&type=%@&action=%@&id=%@",
@"<你的51work6.com用户邮箱>",@"JSON",@"remove",[dict objectForKey:@"ID"]];
}
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:postData];
NSURLConnection *connection = [[NSURLConnection alloc]
initWithRequest:request delegate:self];
if (connection) {
self.datas = [NSMutableData new];
}
}
connectionDidFinishLoading:也要判断标示
- (void) connectionDidFinishLoading: (NSURLConnection*) connection {
NSLog(@"请求完成...");
// NSString* str = [[NSString alloc] initWithData:self.datas encoding:NSUTF8StringEncoding];
// NSLog(str);
NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:self.datas options:NSJSONReadingAllowFragments error:nil];
if (action == QUERY) {//查询处理
[self reloadView:dict];
} else if (action == REMOVE) {//删除处理
NSString *message = @"操作成功。";
NSNumber *resultCodeObj = [dict objectForKey:@"ResultCode"];
if ([resultCodeObj integerValue] < 0) {
message = [resultCodeObj errorMessage];
}
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示信息"
message:message
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles: nil];
[alertView show];
//重新查询
action = QUERY;
[self startRequest];
}
}
iOS 开发指南 第15章 访问Web Service之REST Web Service
标签:
原文地址:http://www.cnblogs.com/haugezi/p/4823325.html