今天小梦给大家分享一个简单的天气预报应用源码:调用的是百度API.整个应用都没有什么难点.只是一个简单的网络请求和json数据处理.在WP8.1有小娜的情况下,天气预报应用还有意义吗?我认为还是有点意义的,至少数据更详细,而要想要用户喜欢,必须有比小娜更人性化的提醒和精美的UI.UI必须要精美.当然小梦今天分享的UI很简单.大家可以根据自己的想象去处理UI.之所以分享出来,是分享JSON的数据处理.在WP8.1开发XML读取中央气象城市代码文件中,分享了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<resultsList> results { get; set; }public class resultsList {public string currentCity{ get; set; }public string pm25 { get; set; }public List<indexList> index { get; set; }public List<weather_dataList> 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; }    }}

应用前台代码:

<Pivot><PivotItem Header="天气" ><ListView Name="listWeather"><ListView.Header ><StackPanel><TextBlock x:Name="textCity" FontSize="30"></TextBlock><TextBlock  x:Name="textPm" FontSize="25"  Foreground="Orange"></TextBlock></StackPanel></ListView.Header><ListView.ItemTemplate  ><DataTemplate><Border  Width="360"   BorderThickness="2" BorderBrush="#FF2996AE"><StackPanel ><TextBlock Text="{Binding date}" FontSize="25"></TextBlock><TextBlock Text="{Binding weather}" FontSize="30"></TextBlock><StackPanel Orientation="Horizontal"><Image Source="{Binding dayPictureUrl}" Stretch="Uniform"Width="60" Height="60"></Image><Image Source="{Binding nightPictureUrl}" Stretch="Uniform"Width="60" Height="60"></Image></StackPanel><TextBlock Text="{Binding wind}" FontSize="25"></TextBlock><TextBlock Text="{Binding temperature }" FontSize="30"></TextBlock></StackPanel></Border></DataTemplate></ListView.ItemTemplate></ListView></PivotItem><PivotItem Header="指数"><ListView Name="listIndex"><ListView.ItemTemplate  ><DataTemplate><Border><StackPanel ><TextBlock Text="{Binding tipt }" FontSize="25" Foreground="#FF2996AE"></TextBlock><TextBlock Text="{Binding zs}" FontSize="30"  Foreground="Green"></TextBlock><TextBlock Text="{Binding des }" FontSize="20" TextWrapping="Wrap"></TextBlock></StackPanel></Border></DataTemplate></ListView.ItemTemplate></ListView></PivotItem></Pivot></Grid><Page.BottomAppBar><CommandBar  Background="#FF2996AE"><AppBarButton Icon="Sync" Label="刷新" Click="AppBarButton_Click"/></CommandBar></Page.BottomAppBar>

后台处理代码:

  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天气预报应用.

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

WP8.1开发:简单的天气预报应用相关推荐

  1. HiLink LiteOS IoT芯片 让IoT开发简单高效

    HiLink & LiteOS & IoT芯片 让IoT开发简单高效 华为HiLink & LiteOS & IoT芯片使能三件套,让IoT开发更简单高效.下一代智能手 ...

  2. 记事本写python怎么运行-Python开发简单记事本

    摘要: 本文是使用Python,结合Tkinter开发简单记事本. 本文的操作环境:ubuntu,Python2.7,采用的是Pycharm进行代码编辑,个人很喜欢它的代码自动补齐功能. 最近很想对p ...

  3. python一般用来开发什么-python主要用来做什么?Python开发简单吗?

    python主要用来做什么?Python开发简单吗?Python技术可做web开发.Python技术可做数据分析.Python技术可做人工智能.将Python用于机器学习,流行的Python机器学习库 ...

  4. 中科院计算所开源Easy Machine Learning:让机器学习应用开发简单快捷 By 机器之心2017年6月13日 13:05 今日,中科院计算所研究员徐君在微博上宣布「中科院计算所开源了

    中科院计算所开源Easy Machine Learning:让机器学习应用开发简单快捷 By 机器之心2017年6月13日 13:05 今日,中科院计算所研究员徐君在微博上宣布「中科院计算所开源了 E ...

  5. 电脑编程用户注册界面java_用JSP/Servlet开发简单的用户注册系统

    用JSP/Servlet开发简单的用户注册系统 2.4界面编程实现 通过JavaBeans封装了大部分的逻辑或数据操作功能.这样,JSP页面中就可以减少很多Java代码,从而使得JSP的建立和修改变得 ...

  6. WindowsPhone7开发简单豆瓣网应用程序之界面设计

    WindowsPhone7开发简单豆瓣网应用程序之界面设计 最近自学了一点WindowsPhone7的知识,自己就利用豆瓣网API开发了一个小的搜索程序.好了!先看看程序运行效果吧! (启动界面) ( ...

  7. SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载

    转载自   SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载 基本准备工作 1.安装JDK1.6以上版本,安装与配置 2.下载mybatis-3.2.0版:htt ...

  8. 好程序员前端分享使用JS开发简单的音乐播放器

    好程序员前端分享使用JS开发简单的音乐播放器,最近,我们在教学生使用JavaScript,今天就带大家开发一款简单的音乐播放器.首先,最终效果如图所示: 首先,我们来编写html界面index.htm ...

  9. java应用开发_开发简单的Java应用

    第一章 开发简单的Java应用 1.Java语言的技术分类 (1)JavaSE:标准版,开发桌面应用 (2)JavaEE:企业版,Web应用 (3)JavaME:小型版,嵌入式 2.如何开发和运行Ja ...

  10. 06 使用VS2012开发简单控制器程序 1214

    06 使用VS2012开发简单控制器程序 1214 01 02

最新文章

  1. APPlication,Session和Cookie的区别
  2. 服务器状态监控之二软硬件环境介绍
  3. NYOJ 661 亲亲串
  4. Django —— 模型层 —— QuerySet —— QuerySet方法参考
  5. [Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能
  6. java学习笔记(4)
  7. 一个典型的视觉系统——照明
  8. 【卷积码系列3】(n,k,m)卷积码的维特比译码实现(不使用MATLAB库函数)及性能对比(vitdec函数-代码见CSDN同名资源)
  9. HTML5 CANVAS 弹幕插件
  10. 发送消息的时候,会指定用户,其实还可以定义媒介为脚本,让用户执行这个脚本...
  11. CDays-3 习题一 (处理命令行参数)及相关内容解析。Python getopt 简介
  12. ARM汇编程序设计之--数据搬移
  13. 【转】GitHub客户端操作1--仓库相关操作github团队协作流程
  14. html5网上商城模板代码,商城 HTML5模板
  15. n2n(Pear-to-pear) 内网穿透
  16. 为什么买域名必须实名认证?这样做什么原因?
  17. linux下lamealsa进行音频流操作(八)用ffmpeg将mp3转为wav
  18. otf和ctf的意义_OTF与CTF的比较与.ppt
  19. 【Python】创蓝253云通讯平台国际短信API接口DEMO
  20. OpenPose 运行指令 (Version@1.7)

热门文章

  1. Java实现复数运算
  2. 重装系统后usb失效如何处理
  3. 前端下载zip出现文件打不开
  4. js打印倒三角形和正三角形
  5. java 图片缩放 失真_Java图片缩小后不失真的代码(缩略图)
  6. 京东开源组件库NutUI 3.1 正式发布:开启多端开发之路
  7. 2017(第六届)国际智慧城市峰会暨智慧城市新科技博览会在沪召开
  8. ES中的Multi_match深入解读:best_fields、most_fields、cross_fields用法一览
  9. 使用OpenCV编写图像窗宽窗位动态调节程序
  10. smtp协议支持身份认证与不认证两种状态。