天气预报-06-Homerwork-网络

 1 //
 2 //  MyNetworkService.m
 3 //  04-天气预报
 4 //
 5
 6 #import "MyNetworkService.h"
 7
 8 #define BASEURL @"http://www.weather.com.cn"
 9
10 @implementation MyNetworkService
11
12 + (void)requestDataWithURL:(NSString *)urlString HTTPMethod:(NSString *)method params:(NSMutableDictionary *)params completionHandle:(void (^)(id result , NSURLResponse *response , NSError *error))completionHandle {
13
14
15     //1.拼接URL
16     NSString *requestURLString = [BASEURL stringByAppendingString:urlString];
17
18     //2.构造URL
19     NSURL *url = [NSURL URLWithString:requestURLString];
20
21
22     //3.创建网络请求
23     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
24
25     request.HTTPMethod = method;
26
27     //4.请求参数 key1=value1&key2=value2&key3=value3
28     NSMutableString *paramStr = [NSMutableString string];
29
30     for (NSInteger i = 0; i < params.count; i++) {
31         NSArray *keys = [params allKeys];
32         NSString *key = keys[i];
33         NSString *value = params[key];
34
35         [paramStr appendFormat:@"%@=%@", key, value];
36         //如果是最后一个键值对,则不加&
37         if (i < params.count - 1) {
38             [paramStr appendFormat:@"&"];
39         }
40
41     }
42
43     //如果为GET请求,则请求参数拼接在URL后面
44     if ([method isEqualToString:@"GET"]) {
45
46         //http://www.baidu.com
47         //http://www.baidu.com?key1=value1
48         NSString *seperate = url.query ? @"&" : @"?";
49         NSString *newUrlString = [NSString stringWithFormat:@"%@%@%@", requestURLString, seperate,paramStr];
50
51         //重新设置加入了请求参数的URL
52         request.URL = [NSURL URLWithString:newUrlString];
53
54
55
56     }
57     //如果为POST请求,则请求参数放到请求体中
58     else if ([method isEqualToString:@"POST"]) {
59
60         request.HTTPBody = [paramStr dataUsingEncoding:NSUTF8StringEncoding];
61     }
62
63     //5.创建session
64     NSURLSession *session = [NSURLSession sharedSession];
65
66     NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
67
68         //判断是否请求成功,成功才解析JSON,并回到主线程更新UI
69         if (!error) {
70             //解析JSON
71             NSJSONSerialization *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
72
73
74             dispatch_async(dispatch_get_main_queue(), ^{
75                 completionHandle(json, response, error);
76             });
77
78         }
79
80
81     }];
82
83     [task resume];
84
85 }
86
87
88 @end
//
//  MyNetworkService.h
//  04-天气预报
//

#import <Foundation/Foundation.h>

@interface MyNetworkService : NSObject

+ (void)requestDataWithURL:(NSString *)urlString HTTPMethod:(NSString *)method params:(NSMutableDictionary *)params completionHandle:(void (^) (id result, NSURLResponse *response, NSError *error))completionHandle;

@end
  1 //
  2 //  ViewController.m
  3 //  04-天气预报
  4 //
  5 #import "ViewController.h"
  6 #import "MyNetworkService.h"
  7
  8
  9 @interface ViewController ()
 10
 11 @end
 12
 13 @implementation ViewController
 14 {
 15     //创建字典保存城市数据。创建数组保存城市名。
 16     NSDictionary *_data;
 17     NSArray *_cities;
 18
 19 }
 20
 21 - (void)viewDidLoad {
 22     [super viewDidLoad];
 23
 24     //通过plist文件获取城市数组。
 25     NSString *filePath = [[NSBundle mainBundle] pathForResource:@"cityCode" ofType:@"plist"];
 26     _data = [NSDictionary dictionaryWithContentsOfFile:filePath];
 27     _cities = [_data allKeys];
 28
 29
 30     //刚进入时请求第一个城市的网络数据
 31     [self pickerView:self.pickerView didSelectRow:0 inComponent:0];
 32
 33
 34
 35 }
 36
 37
 38 - (void)refreshUI:(NSDictionary *)result {
 39     //大字典里key:weatherinfo
 40     //value:小字典。
 41     NSDictionary *weatherinfo = [result objectForKey:@"weatherinfo"];
 42
 43
 44     NSString *windLevel = weatherinfo[@"WS"];
 45     NSString *temp = weatherinfo[@"temp"];
 46     NSString *city = weatherinfo[@"city"];
 47     NSString *windDirection = weatherinfo[@"WD"];
 48     NSString *time = weatherinfo[@"time"];
 49
 50     _tempLabel.text = [NSString stringWithFormat:@"温度:%@",temp];
 51     _windLevelLabel.text = [NSString stringWithFormat:@"风级:%@",windLevel];
 52     _cityLabel.text = [NSString stringWithFormat:@"城市:%@",city];
 53     _windDirLabel.text = [NSString stringWithFormat:@"风向:%@",windDirection];
 54     _publicTimeLabel.text = [NSString stringWithFormat:@"发布时间:%@",time];
 55
 56 }
 57
 58
 59
 60 #pragma mark - UIPickeView Delegate
 61
 62 //列数
 63 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
 64
 65     return 1;
 66 }
 67
 68 //根据城市个数获取行数
 69 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
 70     return _cities.count;
 71 }
 72
 73 //每行的标题
 74 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
 75     NSString *cityName = _cities[row];
 76     return cityName;
 77 }
 78
 79 //选中某行时调用的协议方法
 80 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
 81
 82     //网络加载方法
 83     [self loadWeatherWithCityIndex:row];
 84
 85 }
 86
 87
 88
 89 - (void)loadWeatherWithCityIndex:(NSInteger)index {
 90
 91     //获取被选中的城市名称
 92     NSString *cityName = _cities[index];
 93
 94     //获取城市id
 95     NSString *cityID = _data[cityName];
 96
 97
 98     //根据城市ID拼接URL
 99     NSString *urlString = [NSString stringWithFormat:@"/data/sk/%@.html", cityID];
100
101
102     [MyNetworkService requestDataWithURL:urlString HTTPMethod:@"GET" params:nil completionHandle:^(id result, NSURLResponse *response, NSError *error) {
103
104         NSLog(@"result:%@", result);
105
106         [self refreshUI:result];
107
108     }];
109
110
111 }
112
113
114
115
116 @end
时间: 2025-01-31 06:44:19

天气预报-06-Homerwork-网络的相关文章

爬虫学习 06.Python网络爬虫之requests模块(2)

爬虫学习 06.Python网络爬虫之requests模块(2) 今日内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 知识点回顾 xpath的解析流程 bs4的解析流程 常用xpath表达式 常用bs4解析方法 了解cookie和session - 无状态的http协议 如上图所示,HTTP协议 是无状态的协议,用户浏览服务器上的内容,只需要发送页面请求,服务器返回内容.对于服务器来说,并不关心,也并不知道是哪个用户的请求.对于一般浏览性的网页来说

06.C#网络编程

1.WebClient类 (1)WebClient类的主要方法 DownloadXXX()方法:    下载URI资源文件 OpenXXX()方法:        打开URI资源流 UploadXXX()方法:      上传资源到URI (2)DownloadData()方法 class Program { static void Main(string[] args) { WebClient web = new WebClient(); byte[] temp = web.DownloadD

Caffe C++使用教程

Caffe C++使用教程 Caffe使用教程 by Shicai Yang(@星空下的巫师)on 2015/08/06 初始化网络 #include "caffe/caffe.hpp" #include <string> #include <vector> using namespace caffe; char *proto = "H:\\Models\\Caffe\\deploy.prototxt"; /* 加载CaffeNet的配置 *

Java核心编程开发

Java核心编程开发,本部分内容侧重于java j2se核心部分,共50学时左右,主要内容包括:面向对象编程的六大基本原则及常见八种设计模式.Java核心类库的高级应用,如:文件输入输出流处理.反射.序列化.泛型.多线程.网络编程.DOM4J. 课程内容: 01.Java 中使用 IO 实现数据处理(共8讲) 02.Java 中使用XML实现数据处理(共6讲) 03.Java中的多线程编程(共5讲) 04.多线程高级应用(共5讲) 05.Java中的网络编程(共4讲) 06.网络编程高级应用(共

Web前端+移动端全套视频教程

Web前端+移动端全套视频教程|12.小程序|01.小程序.rar|11.Vue|05.Vue实战练习.rar|04.Vue UI框架Element-UI.rar|03.Vue路由.rar|02.Vue网络请求.rar|01.Vue基础.rar|10.React|06.React网络请求Fetch.rar|05.React UI框架Antd.rar|04.React路由4.x.rar|03.React路由3.x.rar|02.React环境搭建.rar|01.React基础.rar|09.前端构

2019入门物联网教程 物联网开发视频教程 物联网零基础教程 物联网模块教程 物联网技术教程

┣━━10 – 全面掌握嵌入式系统移植 [4.8G]┃ ┣━━D1 – 系统移植概述及环境搭建(上) [1007.2M]┃ ┃ ┣━━L10-D1-1.mp4 [154.4M]┃ ┃ ┣━━L10-D1-2.mp4 [228.3M]┃ ┃ ┣━━L10-D1-3.mp4 [166.5M]┃ ┃ ┣━━L10-D1-4.mp4 [136.7M]┃ ┃ ┣━━L10-D1-5.mp4 [159.2M]┃ ┃ ┗━━L10-D1-6.mp4 [162.2M]┃ ┣━━D2 – 系统移植概述及环境搭建(

爬虫学习推荐目录

01.jupyter环境安装 02.Python网络爬虫第二弹<http和https协议> 03.Python网络爬虫第一弹<Python网络爬虫相关基础概念> 04.Python网络爬虫之requests模块(1) 05.Python网络爬虫之三种数据解析方式 06.Python网络爬虫之requests模块(2) 07.验证码处理 08.Python网络爬虫之图片懒加载技术.selenium和PhantomJS 09.移动端数据爬取 10.scrapy框架简介和基础应用 11.

天气预报---网络加载最新天气信息,截取JSON文件

仿普通的手机上的天气预报功能,从网络上截取JSON文件 实现的效果图如下: 具体代码如下: FirstViewController.m文件 #import "FirstViewController.h" #import "JRViewController.h" #import "CityModel.h" #import "JSONKit.h" #define kW self.view.frame.size.width #def

C#调用天气预报网络服务

本程序通过调用网络上公开的天气预报网络服务来显示某个地区三天的天气,使用到的网络服务地址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx,该天气预报 Web 服务,数据来源于中国气象局 http://www.cma.gov.cn/ 天气图标可至[http://www.webxml.com.cn/images/weather.zip]下载. Web服务的各方法參数直接訪问[http://www.webxml.com.cn/We

Oracle监听网络服务全面剖析_超越OCP精通Oracle视频教程培训06

课程目标 Oracle视频教程,风哥oracle教程培训学习内容包括,Oracle监听概念与常用配置文件,监听工具与服务测试,oracle监听静态注册与动态注册,配置oracle第二监听,oracle监听与客户端配置,Oracle监听日志配置与日常维护规范,Oracle监听安全与密码管理及防火墙,db_link与进程,如何跟踪问题深入分析等超越oracle认证的数据库教程 适用人群 IT相关从业人员.Oracle数据库技术人员.想加工资的.想升职的都可以. 课程简介 Oracle监听网络服务全面