`
喵喵大神
  • 浏览: 37400 次
文章分类
社区版块
存档分类
最新评论

用AFNetworking框架管理从聚合数据上面请求到的数据

iOS 
阅读更多

数据从JSON文档中读取处理的过程称为“解码”过程,即解析和读取过程,来看一下如果利用AFNetworking框架去管理从聚合数据上面请求到的数据。

一、下载并导入AFNetworking框架

这部分内容如果不了解的话可以点击iOS开发之网络编程篇六:AFNetworking3.0使用简介

二、聚合数据API-餐饮美食

1.申请餐饮美食API:https://www.juhe.cn/docs/api/id/45

 

聚合数据API用法简介

2.请求体介绍

lng和lat参数表示对应的经纬度,用来确定你想要请求哪个地方的美食餐饮,key参数即为APPKEY,你申请该API以后可以到应用详细页查询,dtype参数是用来确定你想得到的数据是什么格式的,默认为JSON,如果想要xml格式就需要设置该参数。

3.返回值介绍

 

该餐饮美食API会返回上图所示的参数,可以根据实际需要来使用。

 

三、发送网络请求

1.知道API需要请求的参数以后,就可以通过接口地址和API文档中给出的请求方式,请求到所需的数据。

 

2.根据餐饮美食API的接口文档我们知道需要用get方式去请求。

复制代码
 NSMutableDictionary *params=[NSMutableDictionary dictionary];
    //在数组里面添加请求参数
    params[@"key"] = @"987d0c7bd487209bd5bb4065b3d4fcc2";
    params[@"lng"] = @"121.538123";
    params[@"lat"] = @"31.677132";
    //创建请求管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //发送请求,使用get,请求成功以后返回的数据会存放到responseObject中
    [manager GET:@"http://apis.juhe.cn/catering/query" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
            //在请求成功以后程序会执行success
            //此处可以对请求到的数据进行处理
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
    }];
}
复制代码

四、解析返回的数据

1.我们发送网络请求以后会返回下图所示的数据:

从图中我们可以看到发送请求以后返回了一个字典,字典中result关键字对应的数组就是我们想要得到的数据,我们项目中需要用到该数组中navigation参数对应的数据,那我就可以遍历result关键字对应的数组,找到navigation参数对应的数据,然后将其存放到一个新的数组中。

复制代码
[manager GET:@"http://apis.juhe.cn/catering/query" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {       
        //新建一个字典来存放返回的数据
        NSMutableDictionary *datasouce=[responseObject mutableCopy];        
        //在返回的字典中,将关键字result索引到的数据存放到另外的数组中
        NSArray * resultArray = [datasouce objectForKey:@"result"];
        //遍历resultArray数组得到navigation对应的数据,并存放到result数组中
        for (NSDictionary *dic in resultArray) {
            NSString *navigation = [dic objectForKey:@"navigation"];
            [result addObject:navigation];         
        }
        [self.delegate data:result];
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        NSLog(@"%@",error);
    }];
}
复制代码

2.创建一个继承于NSObject的Data类,用来得到从聚合数据上面请求到的数据,并在Data.h文件中添加相应的属性方法

-(void) getdata;//在ViewController中执行此方法从而得到JSON数据

3.在Data.m文件中完成相应的属性方法

复制代码
-(void) getdata{ 
    __block NSMutableArray *result = [[NSMutableArray alloc] init];
    NSMutableDictionary *params=[NSMutableDictionary dictionary];
    //在数组里面添加请求参数,根据聚合数据的文档说明添加
    params[@"key"] = @"987d0c7bd487209bd5bb4065b3d4fcc2";
    params[@"lng"] = @"121.538123";
    params[@"lat"] = @"31.677132";
    //创建请求管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //发送请求
    [manager GET:@"http://apis.juhe.cn/catering/query" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {       
        //如果数据请求成功返回到responseObject中
        NSMutableDictionary *datasouce=[responseObject mutableCopy];        
        //在返回的字典中通过关键字result索引到的数据存放到另外的数组中
        NSArray * resultArray = [datasouce objectForKey:@"result"];
        //遍历resultArray数组得到navigation对应的数据
        for (NSDictionary *dic in resultArray) {
            NSString *navigation = [dic objectForKey:@"navigation"];
            [result addObject:navigation];         
        }
        [self.delegate data:result];
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        NSLog(@"%@",error);
    }];
}
复制代码

4.创建一个DataDelegate协议,并添加相关的代理方法,用来传递JSON数据。

复制代码
#import <Foundation/Foundation.h>
@protocol DataDelegate //通过代理将得到的JSON数据传递到ViewController
- (void) data: (NSMutableArray *)array;
@end
@interface Data : NSObject
@property (nonatomic, weak) id <DataDelegate> delegate;//代理属性
-(void) getdata;
@end
复制代码

五、在TableView上面显示得到的JSON数据

1.添加相关的属性以及代理协议

@interface ViewController ()<UITableViewDataSource,UITableViewDelegate,DataDelegate>
@property (nonatomic, strong) UITableView *myTableView;
@property (nonatomic, strong) NSArray *myArray;//用来存放JSON数据的数组
@property (nonatomic, strong) Data *myData;
@end

2.使懒加载方式初始化所需的控件以及数组

复制代码
- (Data *)myData{
    if (!_myData) {
        _myData = [[Data alloc] init];
        _myData.delegate = self;
        [_myData getdata];
    }
    return _myData;
}
- (NSArray *) myArray{
    if (!_myArray) {
        _myArray = [[NSArray alloc ] init];       
           }
    return _myArray;
}
- (UITableView *) myTableView{ 
    if (!_myTableView) {
        _myTableView = [[UITableView alloc] initWithFrame:self.view.frame];
        _myTableView.dataSource = self;
        _myTableView.delegate = self;
        [self.view addSubview: _myTableView];
    }
    return _myTableView;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    [self myArray];
    [self myData];
    [self myTableView];
}
复制代码

3.在tableView的数据源方法中将得到的JSON数据显示到tableView上面

复制代码
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return  self.myArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    if (cell == nil) {        
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }
    if (self.myArray != nil && self.myArray.count > 0) {
        cell.textLabel.text = [self.myArray objectAtIndex:[indexPath row]];
    }   
    return cell;
}
复制代码

4.由于tableView的数据源方法会先执行,因此我们需要在Data的代理方法中得到JSON数据以后刷新tableView。

- (void)data:(NSMutableArray *)array{  
    self.myArray = array;
    [self.myTableView reloadData];
}

示例代码

http://pan.baidu.com/s/1skJUHPF

分享到:
评论

相关推荐

    聚合数据 Android 项目开发实战:

    同时,聚合数据的API可能会返回一个预计的接收时间,你可以用此来设置倒计时计时器,让用户知道验证码的有效期。 5. **验证验证码**:当用户输入验证码后,再次调用API进行验证。验证请求通常会携带手机号码和用户...

    android获取聚合数据笑话

    本项目"android获取聚合数据笑话"正是这样一个示例,它展示了如何利用Fastjson和XUtils这两个流行框架从聚合数据API中获取并解析笑话内容。下面我们将深入探讨这个项目涉及的关键知识点。 首先,聚合数据(JuHeData...

    微信小程序学习demo:笑话大全;使用聚合数据API

    在小程序中,开发者通常会使用网络请求模块(wx.request)来与服务器进行交互,发送GET请求到聚合数据API的特定URL,获取笑话数据,这些数据通常以JSON格式返回,包含笑话的标题、内容等字段。 在实际开发过程中,...

    聚合数据狗蛋实验室

    对于机器学习任务,可能会使用到Scikit-learn、TensorFlow或PyTorch等框架,进行数据建模和预测,比如预测用户评分、商家热门程度等。 最后,为了将这些分析结果呈现给用户,后端开发者可能会采用Node.js、Express....

    基于聚合数据做的一个星座运势的微信小程序欢迎大家下载

    【标题】中的“基于聚合数据做的一个星座运势的微信小程序”揭示了这个项目的核心内容,它是一个使用了聚合数据服务的微信小程序,主要用于提供星座运势的相关功能。在微信小程序平台上,用户无需安装即可使用,方便...

    基于聚合数据API的新闻app

    【基于聚合数据API的新闻app】是一个利用API接口获取新闻数据并进行展示的移动应用程序,主要针对Android平台设计。在这款应用中,开发者利用了聚合数据API提供的服务,该服务通常会提供各种实时更新的新闻资讯,...

    arcgis for js 加载聚合数据

    5. **动态聚合**:如果数据量非常大,可以使用聚合函数(如`esri/tasks/GeometryService`的`buffer`或`clip`方法)预先在服务器端聚合,然后再将结果传给客户端,降低客户端的计算负担。 6. **加载在线地图服务**:...

    获取百度地图聚合点下面的相同数据

    接着,"获取百度地图聚合点下面的相同数据"这一需求涉及到了数据处理和交互设计。当用户点击聚合点时,我们需要执行以下步骤: 1. **监听事件**:为markerClusterer对象添加点击事件监听器,当用户点击聚合点时触发...

    违章查询完成工程---聚合数据

    【标题】"违章查询完成工程---聚合数据"是一款基于Android Studio开发的移动应用程序,主要功能是为用户提供车辆违章信息查询服务。它采用先进的MVP(Model-View-Presenter)架构模式,结合Retrofit网络库和RxJava...

    安卓网站交互JSONxmlWebserviceUPnP相关-获取聚合数据的json数据并且解析.rar

    这个压缩包文件“安卓网站交互JSONxmlWebserviceUPnP相关-获取聚合数据的json数据并且解析.rar”主要涉及到的技术点包括JSON数据格式、XML数据格式、Web Service服务以及UPnP(通用即插即用)协议。以下将详细阐述...

    详解Spring Cloud 跨服务数据聚合框架

    在 ace-merge-demo 模块中,我们提供了一个完整的示例代码,演示了如何使用 Spring Cloud 跨服务数据聚合框架来聚合跨服务的数据。 结论 Spring Cloud 跨服务数据聚合框架提供了一种灵活的方式来聚合跨服务的数据...

    Flink实时读取Kafka数据批量聚合(定时按数量)写入Mysql.rar

    标题中的"Flink实时读取Kafka数据批量聚合(定时/按数量)写入Mysql"是一个典型的实时数据处理场景,涉及到大数据技术栈中的三个关键组件:Apache Flink、Apache Kafka和MySQL。以下是对这些技术及其在该场景下应用...

    一个使用vue20开发聚合api数据的简易demo

    在这个“一个使用vue2.0开发,聚合api数据的简易demo”中,我们可以看到如何利用Vue.js 2.0版本来构建一个应用程序,从API接口获取并展示数据。 首先,Vue 2.0 引入了虚拟DOM(Virtual DOM),这是一种优化UI更新的...

    微信小程序天气预报+聚合数据

    (1)根据天气预报接口,获取网络数据 (2)展示选择城市的天气情况,温度,风向,各种数据以及未来...(3)将网络获取的城市天气信息保存到数据库中,便于无网络进行数据请求 (4)对数据库中的城市天气进行增删改查

    基于Retrofit框架的Java实现聚合驾照题库请求与JSON解析设计源码

    本项目是一款基于Retrofit框架的Java实现,旨在通过聚合数据API请求驾照题库,并利用JSON解析技术处理数据。项目源码共计47个文件,涵盖15个XML配置文件、10个PNG图片文件、7个JAR包文件、5个Java源文件、3个Gradle...

    Spring Cloud 跨服务数据聚合框架

    解决Spring Cloud服务拆分后分页数据的属性或单个对象的属性拆分之痛, 支持对静态数据属性(数据字典)、动态主键数据进行自动注入和转化, 其中聚合的静态数据会进行一级混存(guava).如两个服务,A服务的某张表用到了B...

    Android之获取聚合数据的经纬度

    在Android开发中,获取地理位置信息是一项常见的任务,而聚合数据(AggData)提供了一种通过网络获取位置服务的方式。本教程将详细讲解如何利用聚合数据的API来获取经纬度,并进行JSON解析处理。 首先,我们需要...

    delphi+聚合数据_天气数据_json.rar

    标题中的“delphi+聚合数据_天气数据_json.rar”表明这是一个使用Delphi 7编程语言编写的项目,目的是从聚合数据平台获取天气信息,并且这些信息是以JSON格式传输的。Delphi 7是一款历史悠久的集成开发环境(IDE),...

    基于数据挖掘的地理信息服务聚合研究.pdf

    行业信息空间定位则涉及到将非空间化的行业数据转换为地理空间数据,即把行业数据中所包含的位置信息转化为地理坐标,以便能够被地理信息系统(GIS)等工具所使用。这样处理后的数据,可以实现对特定行业数据的空间...

    大数据中台、数据仓库、大数据平台、数据治理经验总结.rar

    5. **0-1建设数据仓库**:从无到有建立数据仓库的步骤,包括需求分析、数据源整合、模型设计、实施部署和持续优化。 6. **数据治理及数据仓库模型设计**:如何在数据治理框架下,进行有效的数据仓库模型设计,确保...

Global site tag (gtag.js) - Google Analytics