zoukankan      html  css  js  c++  java
  • ios 团购信息客户端demo(二)

    接上一篇,这篇我们对我们的客户端加入KissXML,MBProgressHUD,AQridView这几个库,首先我们先加入KissXML,这是XML解析库,支持Xpath,可以方便添加更改任何节点。先从官方网站上下载KissXML这个库

    https://github.com/robbiehanson/KissXML

    接下来,将KissXML库中的KissXML文件夹拷入我们的工程中,如图


    然后跟上次一样,我们通过File/Add File to "Tuan1"这个选项加入到我们的工程中,我们以同样的方法分别加入MBProgressHUD和AGridView这两个库

    在Framework中加入QuartzCore.framework,因为AGridView需要用到。

    接着我们在代码中加入

    #import"MBProgressHUD.h"

    #import"DDXML.h"

    这二行,运行一下,如果没有报错的话,那这几个库我们就加入成功了。

    接着我们更改一下storybord,将FirstViewController这个视图加入NavigationController,选中FirstViewController在主菜单Editor/Embed In/Navigation Controller,系统自动为我们加入NavigationController。

    下面,我们将FirstViewController中清空,所有内容都删除

    好了,到这一步,我们的视图基本都完成了,接下来就是编码了,首先我们来解析美团网团购信息

    FirstViewController.h

     

    [plain] view plaincopy
    1. #import <UIKit/UIKit.h>  
    2. #import "ASIHTTPRequest.h"  
    3.   
    4.   
    5. @interface KKFirstViewController : UIViewController<ASIHTTPRequestDelegate>  
    6.   
    7.   
    8. @end  



     

    FirstViewController.m

     

    [plain] view plaincopy
    1. #import "KKFirstViewController.h"  
    2. #import "MBProgressHUD.h"  
    3. #import "DDXML.h"  
    4. #import "DDXMLElementAdditions.h"  
    5.   
    6. @interface KKFirstViewController (){  
    7.       
    8.     MBProgressHUD *hud;  
    9.     NSMutableArray *arrays;  
    10.       
    11. }  
    12.   
    13. @end  
    14.   
    15. @implementation KKFirstViewController  
    16.   
    17. - (void)viewDidLoad  
    18. {  
    19.     [super viewDidLoad];  
    20.       
    21.     self.navigationItem.title = @"美团";  
    22.     //背景  
    23.     UIImage *bgImage = [UIImage imageNamed:@"bg-app.png"];  
    24.     self.view.backgroundColor = [UIColor colorWithPatternImage:bgImage];  
    25.     //HUD提示框  
    26.     hud = [[MBProgressHUD alloc] init];  
    27.     hud.labelText = @"载入数据...";  
    28.     //网址  
    29.     NSString *urlString = @"http://www.meituan.com/api/v2/beijing/deals";  
    30.       
    31.     [hud showWhileExecuting:@selector(startHttpRequest:) onTarget:self withObject:urlString animated:YES];  
    32.     //因为hud需要显示在最前面,所以我们在NavigationController中加入  
    33.     [self.navigationController.view addSubview:hud];  
    34.       
    35.     arrays = [NSMutableArray array];  
    36. }  
    37.   
    38. //请求URL  
    39. -(void)startHttpRequest:(NSString *)url{  
    40.       
    41.     ASIHTTPRequest *httpRequest = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:url]];  
    42.       
    43.     httpRequest.delegate = self;  
    44.       
    45.     [httpRequest startSynchronous];  
    46.       
    47. }  
    48.   
    49. - (void)viewDidUnload  
    50. {  
    51.     [super viewDidUnload];  
    52.     // Release any retained subviews of the main view.  
    53. }  
    54.   
    55. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  
    56. {  
    57.     return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);  
    58. }  
    59.   
    60.   
    61. //请求结束  
    62. -(void)requestFinished:(ASIHTTPRequest *)request{  
    63.     //移除提示框  
    64.     [hud removeFromSuperview];  
    65.     //返回解析后的数据,每一个Array包括一个字典  
    66.     arrays = [self xmlParser:[request responseData]];  
    67.       
    68.     NSLog(@"%@", arrays);  
    69.       
    70. }  
    71.   
    72. //解析结点  
    73. static NSString *kXPath_Item = @"//data";  
    74. static NSString *kName_Deal = @"deal";  
    75. static NSString *kName_Title = @"deal_title";  
    76. static NSString *kName_Url = @"deal_url";  
    77. static NSString *kName_Img = @"deal_img";  
    78. static NSString *kName_Desc = @"deal_desc";  
    79. static NSString *kName_Tips = @"deal_tips";  
    80.   
    81. //XML解析  
    82. -(NSMutableArray *)xmlParser:(NSData *)data{  
    83.       
    84.     NSMutableArray *array = [NSMutableArray array];  
    85.     //文档开始  
    86.     DDXMLDocument *xmlDoc = [[DDXMLDocument alloc] initWithData:data options:0 error:nil];  
    87.     //返回<data>中的所有元素  
    88.     NSArray *items = [xmlDoc nodesForXPath:kXPath_Item error:nil];  
    89.     //遍历每个元素  
    90.     for (DDXMLElement *item in items) {  
    91.           
    92.         NSMutableDictionary *dict = [NSMutableDictionary dictionary];  
    93.         //返回<deal>中的所有元素  
    94.         NSArray *deals = [item elementsForName:kName_Deal];  
    95.           
    96.         for (DDXMLElement *deal in deals) {  
    97.             //<deal_title>  
    98.             DDXMLElement *title = [deal elementForName:kName_Title];  
    99.             if (title) {  
    100.                 [dict setObject:[title stringValue] forKey:kName_Title];  
    101.             }  
    102.             //<deal_url>  
    103.             DDXMLElement *url = [deal elementForName:kName_Url];  
    104.             if (url) {  
    105.                 [dict setObject:[url stringValue] forKey:kName_Url];  
    106.             }  
    107.             //<deal_img>  
    108.             DDXMLElement *img = [deal elementForName:kName_Img];  
    109.             if (img) {  
    110.                 [dict setObject:[img stringValue] forKey:kName_Img];  
    111.             }  
    112.             //<deal_desc>  
    113.             DDXMLElement *desc = [deal elementForName:kName_Desc];  
    114.             if (desc) {  
    115.                 [dict setObject:[desc stringValue] forKey:kName_Desc];  
    116.             }  
    117.             //<deal_tips>  
    118.             DDXMLElement *tips = [deal elementForName:kName_Tips];  
    119.             if (tips) {  
    120.                 [dict setObject:[tips stringValue] forKey:kName_Tips];  
    121.             }  
    122.               
    123.         }  
    124.         [array addObject:dict];  
    125.     }  
    126.       
    127.     return array;  
    128.       
    129. }  
    130.   
    131. //请求中止(出错)  
    132. -(void)requestFailed:(ASIHTTPRequest *)request{  
    133.       
    134.     [hud removeFromSuperview];  
    135.       
    136.     NSError *error = [request error];  
    137.       
    138.     NSLog(@"RequestError : %@", [error description]);  
    139.       
    140. }  
    141.   
    142. @end  

    这里面最重要的就是解析返回的XML数据,代码里面的注释也写得比较详细了,我想大家也应该能看得懂,取得数据后我们就可以显示在AQGridView中去了。这个内容我们放到第三篇中做详细介绍。

  • 相关阅读:
    洛谷 P3138 [USACO16FEB]Load Balancing S(二维前缀和,离散化)
    洛谷 P1052 [NOIP2005 提高组] 过河(dp,数学)
    洛谷 P1955 [NOI2015] 程序自动分析(并查集,离散化)
    洛谷 P3258 [JLOI2014]松鼠的新家(树上差分,lca)
    洛谷 P2296 [NOIP2014 提高组] 寻找道路(反图bfs)
    洛谷 P4141 消失之物(dp方案数)
    洛谷 P5322 [BJOI2019]排兵布阵(dp,分组背包)
    回溯算法
    分治法
    分支限界法
  • 原文地址:https://www.cnblogs.com/yulang314/p/3549635.html
Copyright © 2011-2022 走看看