API呼叫:GET、POST
阿新 • • 發佈:2019-02-10
一、網路請求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;
});
}
執行結果: