標籤:
一、發送使用者名稱和密碼給伺服器(走HTTP協議)
// 建立一個URL : 請求路徑
NSString *urlStr = [NSString stringWithFormat:@"http://localhost:8080/MJServer/login?username=%@&pwd=%@",usernameText, pwdText];
NSURL *url = [NSURL URLWithString:urlStr];
// 建立一個請求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSLog(@"begin---");
// 發送一個同步請求(在主線程發送請求)
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
// 解析伺服器返回的JSON資料
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
NSString *error = dict[@"error"];
if (error) {
// {"error":"使用者名稱不存在"}
// {"error":"密碼不正確"}
[MBProgressHUD showError:error];
} else {
// {"success":"登入成功"}
NSString *success = dict[@"success"];
[MBProgressHUD showSuccess:success];
}
二、載入伺服器最新的視頻資訊json
// 1.建立URL
NSURL *url = HMUrl(@"video");
// 2.建立請求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 3.發送請求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if (connectionError || data == nil) {
[MBProgressHUD showError:@"網路繁忙,請稍後再試!"];
return;
}
// 解析JSON資料
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
NSArray *videoArray = dict[@"videos"];
for (NSDictionary *videoDict in videoArray) {
HMVideo *video = [HMVideo videoWithDict:videoDict];
[self.videos addObject:video];
}
// 重新整理表格
[self.tableView reloadData];
}];
三、 載入伺服器最新的視頻資訊XML
// 1.建立URL
NSURL *url = HMUrl(@"video?type=XML");
// 2.建立請求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 3.發送請求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if (connectionError || data == nil) {
[MBProgressHUD showError:@"網路繁忙,請稍後再試!"];
return;
}
// 解析XML資料
// 載入整個XML資料
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
// 獲得文檔的根項目 -- videos元素
GDataXMLElement *root = doc.rootElement;
// 獲得根項目裡面的所有video元素
NSArray *elements = [root elementsForName:@"video"];
// 遍曆所有的video元素
for (GDataXMLElement *videoElement in elements) {
HMVideo *video = [[HMVideo alloc] init];
// 取出元素的屬性
video.id = [videoElement attributeForName:@"id"].stringValue.intValue;
video.length = [videoElement attributeForName:@"length"].stringValue.intValue;
video.name = [videoElement attributeForName:@"name"].stringValue;
video.image = [videoElement attributeForName:@"image"].stringValue;
video.url = [videoElement attributeForName:@"url"].stringValue;
// 添加到數組中
[self.videos addObject:video];
}
// 重新整理表格
[self.tableView reloadData];
}];
四、XML
- (void)viewDidLoad
{
[super viewDidLoad];
/**
載入伺服器最新的視頻資訊
*/
// 1.建立URL
NSURL *url = HMUrl(@"video?type=XML");
// 2.建立請求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 3.發送請求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if (connectionError || data == nil) {
[MBProgressHUD showError:@"網路繁忙,請稍後再試!"];
return;
}
// 解析XML資料
// 1.建立XML解析器 -- SAX -- 逐個元素往下解析
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 2.設定代理
parser.delegate = self;
// 3.開始解析(同步執行)
[parser parse];
// 4.重新整理表格
[self.tableView reloadData];
}];
}
#pragma mark - NSXMLParser的代理方法
/**
* 解析到文檔的開頭時會調用
*/
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
// NSLog(@"parserDidStartDocument----");
}
/**
* 解析到一個元素的開始就會調用
*
* @param elementName 元素名稱
* @param attributeDict 屬性字典
*/
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([@"videos" isEqualToString:elementName]) return;
HMVideo *video = [HMVideo videoWithDict:attributeDict];
[self.videos addObject:video];
}
/**
* 解析到一個元素的結束就會調用
*
* @param elementName 元素名稱
*/
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
// NSLog(@"didEndElement----%@", elementName);
}
/**
* 解析到文檔的結尾時會調用(解析結束)
*/
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
// NSLog(@"parserDidEndDocument----");
}
#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.videos.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID = @"video";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
}
HMVideo *video = self.videos[indexPath.row];
cell.textLabel.text = video.name;
cell.detailTextLabel.text = [NSString stringWithFormat:@"時間長度 : %d 分鐘", video.length];
// 顯示視頻
NSURL *url = HMUrl(video.image);
[cell.imageView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placehoder"]];
return cell;
}
ios 解析json,xml