作品源码来自于以前现代操作系统应用开发课程上的课程作业,并在本学期由小组成员进行了完善和修改而完成。
天气app,主要功能是天气查询,辅助功能是查找城市返回地图、查找城市实时路况,通过调用高德的API实现;允许用户注册、登录,登录后使用收藏功能。高德开放平台:http://lbs.amap.com/dev/key/app 我已经注册了key(5fd3b8bd943a505ccfec387943bba945),调用API时可直接使用。 所调用的API及它们之间的关系:
功能 | API |
---|---|
查询用户所在地的天气 | IP定位 → 天气查询 |
查询某个城市的天气 | 行政区划查询 → 天气查询 |
查城市(地区)返回对应地图 | 地理编码 → 静态地图(使用label) |
查城市(地区)实时交通路况 | 地理编码 → 静态地图(traffic=1) |
- 页面导航:页面之间的跳转,通过侧边栏的几个按钮实现
- 数据绑定:在第二个页面,绑定了checkbox的isChecked属性和按钮的content属性,方便用户对查询进行选择
- 后台运行与程序生命周期:挂起时保存页面信息(如查询框中的信息),重新运行后恢复信息
- 程序间通信:分享天气信息
- 动态磁贴:每次查询都会进行更新,把当日天气、明后日天气装载到动态磁贴中,循环展示
- 文件管理:打开一个选择图片的filePicker,供用户选择头像
- 数据库:用于管理用户信息和城市信息
- 网络访问:调用高德的API并解析,使它反馈到页面上,并有一定的异常处理
用到的知识基本上都能在以前的作业和课件里面找到
- 负责设计app的页面,需要设计界面布局,页面之间的导航,自适应UI,数据绑定。
- 暂定为3个页面,天气查询、地图查询和登录界面,可参考win10自带的天气应用的界面。
- 三个页面的布局图包含在PPT中。
细分为3部分。每部分要求写的成员函数如下:
- 实现后台运行与程序生命周期、程序间通信:OnNavigatedTo(3个),OnNavigatedFrom(3个),OnShareRequested
- 实现动态磁贴、文件管理:selectPicture,searchWeather,tile.xml,OnLaunched(App.xaml.cs里面)
- 实现网络访问、数据库:addFavourite(2个),showCollection(2个),logIn,以及数据库相关的一些函数
- 其他函数如searchWeather、searchMap、showWeather则已经编写完成。
网络访问方面,这次依赖的是高德的API,返回结果有XML/JSON格式的字符串,也有图像。因为字符串格式较复杂,解析起来花费的功夫也比较多,还需要考虑一些API未考虑进去的异常。当返回图像时,不能直接获得它的路径,需要用HttpResponseMessage类来接返回结果,把它转换为IInputStream,通过RandomAccessStream的CopyAsync方法,利用输入输出流转换为IRandomAccessStream类型变量,最后才能放到BitmapImage的路径中。
同时管理了2个数据库,分别它们有插入、查询操作,需要2个连接数据库的变量。
绑定了checkbox的isChecked属性和按钮的content属性,因为它们的类型不同,需要写一个转换器,把bool类型的变量和string类型的变量相互转换。
最后,解析API的时候,写了不少重复的代码,其中有很大一部分本是可重用的,显得不简洁且不易读。有机会希望能重写这些函数,减少冗余,提高可读性。