实验步骤
Week 4
- 修改App类中的OnSuspending和OnLaunched方法,以实现程序挂起时保存应用程序的页面,重新打开程序时加载应用程序挂起钱的页面;
- 重写两个页面的OnNavigatedFrom和OnNavigatedTo方法,分别在挂起前后存储和载入页面中的信息。
Week 5
- 新建Tile.xml,用xml文件编写不同大小磁贴的基本内容模板;
- 在MainPage类和NewPage类中定义Update()方法,利用标准的处理XML DOM的方式,根据当前ListItemViewModels中的内容,为每个item创建磁贴;
- 在增加、删除和更改item时,调用Update()方法,动态更新磁贴;
- 在MainPage类的OnNavigationTo方法中添加DataRequested事件处理程序;
- 在MainPage中定义一个方法来接收DataRequested事件产生的DataRequest对象,并修改该对象中DataPackage的内容,来定义要共享的内容;
- 在MainPage中定义Share方法,实现在点击Share按钮时打开共享的UI界面。
Week 6
- 在App类中定义LoadDatabase方法,使用SQLitePCL API实现在应用打开时创建、打开或读取SQLite数据库,恢复应用的状态;
- 修改ListItemViewModels中对ListItem增、删、改的方法,使用SQLitePCL API实现Item内容在数据库中的实时更新;
- 修改ListItem中属性completed的get和set方法,使Item的完成状态能在数据库中实时更新;
- 在MainPage中添加搜索框和搜索按钮,并定义一个通过点击按钮触发的搜索函数,利用SQL的SELECT语句,实现对item的模糊查找。
关键步骤截图
图1. 应用页面:
图4. 磁贴示例:
图5. 分享功能示例:
图6. 搜索功能示例:
亮点与改进
- 实现图片和item的动态绑定
- 在挂起并关闭应用后,能够恢复item与图片的对应关系,恢复整个页面原本的状态;
- 在动态磁贴中,能根据item的图片来动态修改磁贴的背景图片;
- 共享item时,能够动态共享item对应的图片;
- 加入数据库功能后,能够完整保存item的图片信息(包括用户自定义的图片宽度),实现了应用数据的持久化。
修改日期显示格式
修改日期的存储和显示格式为“yyyy-MM-dd”,去掉日期的具体时间和时区信息,更加简洁。
使用可视化工具查看数据库内容
使用SQLite Expert,可以直观地查看到数据库的内容,方便程序的调试。
遇到的问题
问题: 挂起并关闭时,无法将ImageSource类型存入LocalSettings中,导致无法还原图片。
解决方案:查阅资料后,发现可以将图片文件的路径(类型为string)存入LocalSettings,恢复的时候再通过路径读取图片文件,以达到保存图片的目的,问题解决。
问题:更新动态磁贴时,每个item会出现多个磁贴。
解决方案: 在调用更新磁贴的函数时,会为每个item重新创建一个磁贴,因此出现了重复的磁贴。在函数中使用TileUpdater.Clear()清空当前磁贴,就可以解决问题。
思考与总结
LocalFolder:存储应用的本地数据,只能在本地访问,存储容量与硬盘容量有关。
RoamingFolder:存储应用的漫游数据,能够跨设备访问,存储容量比较小。
TempFolder:存储应用的临时数据,不具有持久性。
StringBuilder作用:与string不同,StringBuilder是动态的,可以动态调整大小,在拼接字符串时不用频繁申请新的内存空间,有利于提高程序的运行效率。
在本次实验中,我进一步完善了我的第一个UWP应用,为应用添加了动态磁贴,利用SQLite数据库实现了应用数据的持久化,并且为应用加入了分享和搜索功能。
在实验中,我学到了许多有趣而实用的知识,例如应用程序的生命周期、利用xml创建动态磁贴、应用间通信等等,并且将刚刚学会的SQL语言应用到了实践中,很好地巩固了数据库的相关知识。经过这次实验,我的应用具有了实用性,能够真正按照应用的设计目的来运行。当然,应用还存在一些小缺陷,仍需要通过进一步的学习来加以优化。
GitHub
https://github.com/Xungerrrr/SYSU-UWP/tree/master/MyList