同步異步網絡解析方法總結

異步網絡解析不能套異步網絡解析

// 網絡編程
// 完整的網路請求總體上分三步
/*
1. nsurl 創建網絡 請求地址
2. nsurlrequest 創建網絡請求
3. nsurlconnection 創建網絡鏈接
*/
// 1.url
NSURL *url = [NSURL URLWithString:@”http://bea.wufazhuce.com/OneForWeb/one/getC_N?strDate=2015-08-09&strRow=1&strMS=1“];
// get: NSURLRequest 不可變的網路請求對象,就是 get 請求.特點1.通過網址傳輸,最大255字節,明文可見
NSURLRequest *get_request= [[NSURLRequest alloc]initWithURL:url cachePolicy:0 timeoutInterval:10];// url 緩衝策略 最長請求時間
// post 特點 data 傳輸,最大1g, 二進制文件
NSURL *url2 = [NSURL URLWithString:@”http://bea.wufazhuce.com/OneForWeb/one/getC_N“];
NSData *data1 = [@”strDate=2015-08-09&strRow=1&strMS=1” dataUsingEncoding:NSUTF8StringEncoding ];
// 此處是NSMutableURLRequest 爲 post 所用
NSMutableURLRequest *post_request = [[NSMutableURLRequest alloc]initWithURL:url2 cachePolicy:0 timeoutInterval:10];
[post_request setHTTPMethod:@”post”];// 設置請求方法爲 post
[post_request setHTTPBody:data1]; // 設置要請求什麼數據

// 3.建立鏈接
// 同步鏈接 建立鏈接 同步鏈接等待,服務器響應,成功則返回數據,失敗者返回失敗數據
NSURLResponse *response = nil;
NSError *error = nil;
// 返回請求得到的數據
NSData *data3 = [NSURLConnection sendSynchronousRequest:get_request returningResponse:&response error:&error];
NSDictionary *rootDic2 = [NSJSONSerialization JSONObjectWithData:data3 options:0 error:nil];// 可以解析解析了

// 異步網絡請求鏈接  分 delegate 和 block兩種方法
// block
// sendAsynchronous 三個參數 1.request 請求對象 2.queue 數據請求完成後返回的線程, 3.^block 把請求完成的數據毀掉給 ViewController
[NSURLConnection sendAsynchronousRequest:get_request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
     //解析 或者執行其他操作  可以將解析後的數據賦給系統屬性  使用的是 JSON 解析
    NSDictionary *rootDic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    NSDictionary *contentEntityDic = [rootDic objectForKey:@"contentEntity"];
}];

// 第二種異步鏈接請求方式 delegate 代理. 代理的優點:追蹤請求過程 <NSURLConnectionDelegate,NSURLConnectionDataDelegate>
 // 1.  NSURLRequest *request = [[NSURLRequest alloc] initWithURL:acitvityListURL cachePolicy:0 timeoutInterval:10];

// [[NSURLConnection alloc]initWithRequest:get_request delegate:self];
// 2.使用便利構造嗎器  通常使用這種方法
// [NSURLConnection connectionWithRequest:get_request delegate:self];

}

  • (void)connection:(NSURLConnection )connection didReceiveResponse:(NSURLResponse )response
    {// 鏈接成功 打印迴應 初始化 data
    self.doubanData = [NSMutableData data];
    }
  • (void)connection:(NSURLConnection )connection didReceiveData:(NSData )data
    {
    NSLog(@”正在接受數據”);
    [self.doubanData appendData:data];// 將剛得到數據添加到原來的數據後面
    }

  • (void)connectionDidFinishLoading:(NSURLConnection *)connection
    {// 網絡請求結束後 可以進行解析
    NSDictionary *doudic1 = [NSJSONSerialization JSONObjectWithData:self.doubanData options:0 error:nil];
    NSArray *arr = [doudic1 objectForKey:@”events”];
    }

pragma mark- NSURLConnectionDelegate

  • (void)connection:(NSURLConnection )connection didFailWithError:(NSError )error
    {// 當網絡鏈接錯誤
    NSLog(@”網絡異常”);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章