API调用:GET、POST

来源:互联网 发布:java icmp协议 编辑:程序博客网 时间:2024/06/06 10:55

一、网络请求GET
使用新浪微博提供的开放API(如下图),获得相应信息(GET)。
这里写图片描述
同步:当一个线程在执行某个请求时,其它线程进入等待状态
异步:当一个线程在执行某个请求时,进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。
1.同步GET
步骤:

  • 请求URL与请求参数Access Token值用“?”进行拼接
NSString *URLString = @"  ~ ? ~    ";
  • 编码
URLString = [URLString stringAddingPrecentEncodingWithAllowedCharacters :[NSCharacterSet URLQueryAllowedCharacterSet]];
  • 将得到的字符串转化成URL
NSURL *URL = [NSURL URLWithString:URLString];
  • 创建URL请求
NSNRLRequest *request = [NSURLRequest requestWithURL:URL cahePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];/*requestWithURL:请求URLcahePolicy:缓存策略timeoutInterval:请求超时*/
  • 进行网络请求,得到json数据
NSData *data = [NSURLConnection sendSynchronousRequest:request returnResponse:nil error:nil];
  • 解析json(得到NSDictionary格式的数据)
NSDictionary *dic = [NSJOSNSerialization JSONObjectWithData:data option:NSJSONNReadingAllowFragments error:nil];
  • 接受字典、通过对字典的操作,取出key所对应的value值
//WeiBoModel是一个拥有多个属性的类,用于接收json数据WeiBoModel *model = [[WeiBoModel alloc]initWithDictionary:dic];NSString *text = [model.statuses[0] objectForKey:@"text"];
  • 将Value显示在UI上
//textView为UI上的text控件self.textView.text = text;

2.异步GET请求

//代码实现的与同步GET请求的前五步一样,而异步请求可以通过代理去实现。[NSURLConnection connectionWithRequest:request delegate:self]

代理(NSURLConnectionDataDelegate)中需要实现的方法:

-(void)connection:(NSURLConnection *)connectiondidReceiveRespone:(NSURLResponse *)respond{    //初始化一个mDataGet 用于接收请求返回的数据    _mDataGet = [NSMutableData data];}-(void)connection:(NSURLConnection *)connectiondidReceiveData:(NSData *){       //将请求回来的数据追加到mDataGet后面    [_mDataGet appenedData:data];}-(void)connectionDidFinishLoading:(NSURLConnection *)connection{    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData _mDataGet options:NSJSONReadingAllowFragments error:nil];NSString *text = [model.statuses[0] objectForKey:@"text"];dispatch_async(dispatch_get_main_queue(), ^{            self.textView.text = text;        });}

运行结果:
这里写图片描述

0 0