博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WP8.1开发:简单的天气预报应用
阅读量:6707 次
发布时间:2019-06-25

本文共 7963 字,大约阅读时间需要 26 分钟。

今天小梦给大家分享一个简单的天气预报应用源码:调用的是.整个应用都没有什么难点.只是一个简单的网络请求和json数据处理.在WP8.1有小娜的情况下,天气预报应用还有意义吗?我认为还是有点意义的,至少数据更详细,而要想要用户喜欢,必须有比小娜更人性化的提醒和精美的UI.UI必须要精美.当然小梦今天分享的UI很简单.大家可以根据自己的想象去处理UI.之所以分享出来,是分享JSON的数据处理.在中,分享了XML文件和JSON数据解析的方法,不过其中是直接处理的JSON数据,今天分享的是利用对象序列化JSON数据.当然,如有不当或错误,欢迎指正.

JSON数据本身:

{    "error": 0,    "status": "success",    "date": "2014-09-13",    "results": [        {            "currentCity": "西安市",            "pm25": "25",            "index": [                {                    "title": "穿衣",                    "zs": "较舒适",                    "tipt": "穿衣指数",                    "des": "建议着薄外套、开衫牛仔衫裤等服装。年老体弱者应适当添加衣物,宜着夹克衫、薄毛衣等。"                },                {                    "title": "洗车",                    "zs": "不宜",                    "tipt": "洗车指数",                    "des": "不宜洗车,未来24小时内有雨,如果在此期间洗车,雨水和路上的泥水可能会再次弄脏您的爱车。"                },                {                    "title": "旅游",                    "zs": "一般",                    "tipt": "旅游指数",                    "des": "温度适宜,有微风同行,但较强降雨的天气将给您的出行带来很多的不便,若坚持旅行建议带上雨具。"                },                {                    "title": "感冒",                    "zs": "较易发",                    "tipt": "感冒指数",                    "des": "天气较凉,较易发生感冒,请适当增加衣服。体质较弱的朋友尤其应该注意防护。"                },                {                    "title": "运动",                    "zs": "较不宜",                    "tipt": "运动指数",                    "des": "有较强降水,建议您选择在室内进行健身休闲运动。"                },                {                    "title": "紫外线强度",                    "zs": "最弱",                    "tipt": "紫外线强度指数",                    "des": "属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。"                }            ],            "weather_data": [                {                    "date": "周六 09月13日 (实时:16℃)",                    "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/zhongyu.png",                    "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/zhongyu.png",                    "weather": "中雨",                    "wind": "西南风微风",                    "temperature": "15℃"                },                {                    "date": "周日",                    "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/zhongyu.png",                    "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/zhongyu.png",                    "weather": "中雨",                    "wind": "西南风微风",                    "temperature": "18 ~ 15℃"                },                {                    "date": "周一",                    "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/zhongyu.png",                    "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/zhongyu.png",                    "weather": "中雨",                    "wind": "西南风微风",                    "temperature": "19 ~ 15℃"                },                {                    "date": "周二",                    "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/zhongyu.png",                    "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/zhongyu.png",                    "weather": "中雨",                    "wind": "西南风微风",                    "temperature": "17 ~ 15℃"                }            ]        }    ]}

我们根据JSON数据构建对象:(对象名称最好和数据名称保持一致)

 

public   class WeatherData    {        public int error { get; set; }        public string status { get; set; }        public string date { get; set; }        public List
results { get; set; } public class resultsList { public string currentCity{ get; set; } public string pm25 { get; set; } public List
index { get; set; } public List
weather_data { get; set; } } public struct indexList { public string title { get; set; } public string zs { get; set; } public string tipt { get; set; } public string des { get; set; } } public struct weather_dataList { public string date { get; set; } public string weather { get; set; } public string wind { get; set; } public string temperature { get; set; } public Uri dayPictureUrl { get; set; } public Uri nightPictureUrl { get; set; } } }

应用前台代码:

 

后台处理代码:

 

public sealed partial class MainPage : Page    {        private string latitude = null;        private string longitude = null;        private string responseText = null;        private HttpClient httpClient;        private HttpResponseMessage response;        private Weather.WeatherData.resultsList weather;        public MainPage()        {            this.InitializeComponent();            this.NavigationCacheMode = NavigationCacheMode.Required;            httpClient = new HttpClient();            var headers = httpClient.DefaultRequestHeaders;//获取每个请求标头的集合            headers.UserAgent.ParseAdd("ie");            headers.UserAgent.ParseAdd("Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");        }        protected  async override void OnNavigatedTo(NavigationEventArgs e)        {            Geolocator geolocator = new Geolocator();            geolocator.DesiredAccuracyInMeters = 50;            try            {                Geoposition geoposition = await geolocator.GetGeopositionAsync(                    maximumAge: TimeSpan.FromMinutes(5),                    timeout: TimeSpan.FromSeconds(10));                latitude = geoposition.Coordinate.Point.Position.Latitude.ToString();                longitude = geoposition.Coordinate.Point.Position.Longitude.ToString();            }            catch (UnauthorizedAccessException)            {                        Debug.WriteLine( "无法获取位置信息!");            }         }        private  async void AppBarButton_Click(object sender, RoutedEventArgs e)        {            response = new HttpResponseMessage();            Uri resourceUri;            String Address = "http://api.map.baidu.com/telematics/v3/weather?location="+longitude+","+latitude+"&output=json&ak=你的KEY";            Uri.TryCreate(Address.Trim(), UriKind.Absolute, out resourceUri);            try            {                response = await httpClient.GetAsync(resourceUri);                response.EnsureSuccessStatusCode();                responseText = await response.Content.ReadAsStringAsync();            }            catch (Exception ex)            {                Debug.WriteLine("网络请求失败!" + ex.Message.ToString());             }            DataContractJsonSerializer obj = new DataContractJsonSerializer(typeof(WeatherData));            WeatherData weatherData = obj.ReadObject(new MemoryStream(Encoding.UTF8.GetBytes(responseText))) as WeatherData;            weather = weatherData.results.FirstOrDefault();          listWeather.ItemsSource = weather.weather_data;            listIndex.ItemsSource = weather.index;             textCity.Text = weather.currentCity.ToString();            textPm.Text= "PM2.5:"+weather.pm25.ToString();        }

 

运行效果如下:

 

WP8.1开发:简单天气预报应用 - 编程小梦 - 1WP8.1开发:简单天气预报应用 - 编程小梦 - 2

 

完整源码下载:

 

转载于:https://www.cnblogs.com/bcmeng/p/3971542.html

你可能感兴趣的文章
《数学与泛型编程:高效编程的奥秘》一3.2 筛选素数
查看>>
不想被攻击,5款便携式反病毒和反恶意软件帮到你
查看>>
【投资人不懂AI】为什么说AI创业不是4、5个人的团队就能搞定的事
查看>>
ARM公司收购Apical,欲致力推进“目联网”技术
查看>>
《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.3.2 XML Schema
查看>>
《机器人自动化:建模、仿真与控制》——1.5 习题解答
查看>>
积水成渊——数据中心用水效率分析
查看>>
重新定义云数据库 阿里云POLARDB 9月21日发布
查看>>
物联网安全威胁剧增 如何拓展移动化能力
查看>>
工业物联网:创造价值 转换业务模式
查看>>
思科若要加入超融合大战:需启用你的现金
查看>>
程序员如何既不耽误工作又有时间干业余项目?
查看>>
王胤:我是怎么把体温计变成助孕计的
查看>>
Linux下如何定制SSH来简化远程访问
查看>>
空与非空 EMPTY_LOB和NULL的区别
查看>>
未来的主角是公有云还是私有云?哪些云安全企业能在行业洗牌中脱颖而出
查看>>
可能吞噬硬件的无服务器云
查看>>
如何自行搭建一个威胁感知大脑 SIEM?| 硬创公开课
查看>>
安全圈老司机为什么会在这个游戏里翻车?(内附详细解谜攻略)
查看>>
大数据将带来哪些“健康红利”?
查看>>