1. 程式人生 > >API呼叫:GET、POST

API呼叫:GET、POST

一、網路請求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:請求URL
cahePolicy:快取策略
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 *)connection
didReceiveRespone:(NSURLResponse *)respond{
    //初始化一個mDataGet 用於接收請求返回的資料
    _mDataGet = [NSMutableData data];
}
-(void)connection:(NSURLConnection *)connection
didReceiveData:(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;
        });

}

執行結果:
這裡寫圖片描述