WP8.1开发:简单的天气预报应用

今天小梦给大家分享一个简单的天气预报应用源码:调用的是百度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开发:简单天气预报应用 - 编程小梦 - 1WP8.1开发:简单天气预报应用 - 编程小梦 - 2

 

完整源码下载:WP8.1天气预报应用.

 

数据中心机房是现代信息技术的核心设施,它承载着企业的重要数据和服务,因此,其基础设计与规划至关重要。在制定这样的方案时,需要考虑的因素繁多,包括但不限于以下几点: 1. **容量规划**:必须根据业务需求预测未来几年的数据处理和存储需求,合理规划机房的规模和设备容量。这涉及到服务器的数量、存储设备的容量以及网络带宽的需求等。 2. **电力供应**:数据中心是能源消耗大户,因此电力供应设计是关键。要考虑不间断电源(UPS)、备用发电机的容量,以及高效节能的电力分配系统,确保电力的稳定供应并降低能耗。 3. **冷却系统**:由于设备密集运行,散热问题不容忽视。合理的空调布局和冷却系统设计可以有效控制机房温度,避免设备过热引发故障。 4. **物理安全**:包括防火、防盗、防震、防潮等措施。需要设计防火分区、安装烟雾探测和自动灭火系统,设置访问控制系统,确保只有授权人员能进入。 5. **网络架构**:规划高速、稳定、冗余的网络架构,考虑使用光纤、以太网等技术,构建层次化网络,保证数据传输的高效性和安全性。 6. **运维管理**:设计易于管理和维护的IT基础设施,例如模块化设计便于扩展,集中监控系统可以实时查看设备状态,及时发现并解决问题。 7. **绿色数据中心**:随着环保意识的提升,绿色数据中心成为趋势。采用节能设备,利用自然冷源,以及优化能源管理策略,实现低能耗和低碳排放。 8. **灾难恢复**:考虑备份和恢复策略,建立异地灾备中心,确保在主数据中心发生故障时,业务能够快速恢复。 9. **法规遵从**:需遵循国家和地区的相关法律法规,如信息安全、数据保护和环境保护等,确保数据中心的合法运营。 10. **扩展性**:设计时应考虑到未来的业务发展和技术进步,保证机房有充足的扩展空间和升级能力。 技术创新在数据中心机房基础设计及规划方案中扮演了重要角色。例如,采用虚拟化技术可以提高硬件资源利用率,软件定义网络(SDN)提供更灵活的网络管理,人工智能和机器学习则有助于优化能源管理和故障预测。 总结来说,一个完整且高效的数据中心机房设计及规划方案,不仅需要满足当前的技术需求和业务目标,还需要具备前瞻性和可持续性,以适应快速变化的IT环境和未来可能的技术革新。同时,也要注重经济效益,平衡投资成本与长期运营成本,实现数据中心的高效、安全和绿色运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值