20150505

2015/05/05         星期二

计划:

  1. 点击场景的一个Item时包含以下操作:读取该场景的数据表à根据表格中的include_table和include_id的值分别去对应数据表取状态à将状态存进数组à将数组作为参数传递给显示页面à显示页面显示列表;
  2. 解决问题:从场景详细页面点击返回按钮时,返回设备页面,而不是场景页面,原因在于sceneFragment经过onPause()和onStop()之后再生成时调用onStart()和onResume(),而onResume()函数中设定了setTabSelect(0),即默认为设备页面。

完成:

  1. 开发场景详细页面,新建两张position表格,起床对应position0表,回家对应position2表,点击Item0和Item2时,跳转入SceneItemActivity类中,显示表中的数据;当点击SceneFragment中Item的开关按钮时,改变对应表中设备的开关状态;
  2. 删除MainActivity中onPause()函数中的DeviceFragment=null;语句,即可解决问题;
  3. 遇到问题:当场景中的开关改变其包含的灯具状态后,照明页面的灯具状态没有更新,尝试解决,没有成功;

2015/05/06         星期三

计划:

  1. 解决照明页面重新生成时灯具变多的问题;
  2. 解决灯具状态更新的问题;

完成:

  1. 之所以照明页面在经过onStop()、onDestoryView()之后再生成时灯具变多,是因为再生成包含onCreatView()、onStart()、onResume(),而onCreatView()中的数组定义成了全局变量,将其改为局部变量即可;
  2. 添加环境信息的图标;
  3. 没能解决灯具状态更新的问题,网上给出的方法主要有两种:一种是adapter.notifyDataSetChanged();另一种是使用线程,在点击场景的状态开关时,发送消息,刷新灯具状态。第一种方法容易理解,但是刷新操作在何处、如何调用等问题还没有弄清楚;第二种方法需要学习线程的知识。

2015/05/07         星期四

计划:

  1. 继续研究场景开关改变后,灯具状态开关的刷新显示问题;
  2. 补充另外两个场景的详细页面;

完成:

  1. 完成照明状态开关刷新操作,使用的方法是

在LightFragment中定义函数:

public void getRefresh() {           

                                adapter.notifyDataSetChanged();

                }

在DeviceFragment中定义函数:

public Fragment getLightFragment(){

                                return lightFragment;

                }

MainActivity中设备菜单下添加语句:

LightFragment  lightFragment = (LightFragment) ((DeviceFragment) deviceFragment).getLightFragment();

                lightFragment.getRefresh();

注意:要调用LightFragment中的getRefresh()函数需要实例化LightFragment,此处万万不能使用 LightFragment lightfragment = new LightFragment();否则程序会报空指针异常的错误。

  1. 上述操作的数据基础是:建立一个全局变量的类DataArray,在读取数据库状态之后将照明和窗帘的状态信息存储进这个全局变量,操作场景开关时,改变全局变量的值,这样在切换底部导航栏时进行刷新操作才能有效。
  2. 修改窗帘页面的刷新操作;
  3. 添加了场景的详细页面;

至此页面的开发已基本完成,下一步的主要任务是:学习通信的知识,完成硬件连接与调试。

2015/05/08         星期五

计划:

  1. 将从数据库获取数据的操作移植到线程中去;

完成:

  1. 新建DataArrayThread类,将打开数据库、取得数据库数据等操作转移到单独的线程中执行;

参考资料:

Java创建线程的两个方法

实现Runnable接口相对于扩展Thread类来说,具有无可比拟的优势。这种方式不仅有利于程序的健壮性,使代码能够被多个线程共享,而且代码和数据资源相对独立,从而特别适合多个具有相同代码的线程去处理同一资源的情况。这样一来,线程、代码和数据资源三者有效分离,很好地体现了面向对象程序设计的思想。因此,几乎所有的多线程程序都是通过实现Runnable接口的方式来完成的。

出现java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()异常

原因:在Android中不允许Activity里新启动的线程访问该Activity里的UI组件,这样会导致新启动的线程无法改变UI组件的属性值。

2015/05/11         星期一

计划:

  1. 学习灯具提供的API,进行灯具连接开发;
  2. 进行灯具连接测试;

完成:

  1. 初步完成灯具连接的开发,即调用灯具的API,进行开关控制;
  2. 发现很多问题,如初次进入程序,灯具页面列表为空;不实现飞利浦灯具实际控制时点击开关程序崩溃等,明天尝试修复;

参考资料:

PhilipsHueSDK-Java-MultiPlatform-Android

2015/05/12         星期二

计划:

  1. 添加判断机制,修复Bug;
  2. 实现场景状态下控制实际灯具;
  3. 修改改变场景状态时,灯具刷新机制,之前采用的在切换底部菜单栏时刷新列表并不符合实际;
  4. 打开程序时,刷新此刻灯具的状态,即若打开程序之前灯是亮着的,则程序中灯具的状态也应该是打开的;

完成:

  1. 修复改变开关状态时程序崩溃的问题,即增加判断机制;
  2. 实现改变场景状态时,下属实际灯具同时改变其状态;
  3. 未对场景状态改变时,灯具列表状态刷新时机做修改,因为显示刷新和灯具实际状态的刷新是两回事,点击开关,灯具状态即刻改变,但灯具状态的显示并没有必要立即刷新;
  4.  

参考资料:

199刀飞利浦HUE惨遭拆解 阿拉丁神灯小队是神马?

Philips(飞利浦) Hue LED(知乎)

百度文库

2015/05/13         星期三

计划:

  1. 连接灯具,拍照;
  2. 学习飞利浦灯具文档,尽量理解其机制;
  3. 开发注册登陆模块;

完成:

  1. 拍照,先是任さん跟我一起去拍的,但是因为拍到的画面中涉及到了公司的其他开发,因此作废,最后只拍了在桌子上的带灯;
  2. 浏览灯具文档,弄清楚了获取灯具状态的原理,和我之前使用的大致相同,只不过我并没有使用service、thread等;

参考资料:

Android:布局实例之模仿京东登录界面

Android连接SQLServer详细教程(数据库+服务器+客户端)

基于android的远程视频监控系统(已开放源码)

android开发之多线程实现方法概述

Android数据存储(3)SQLite简介和简单的登录与注册源代码

2015/05/14         星期四

计划:

  1. 总结应用的功能框架;
  2. 总结应用的文件结构;
  3. 开发登陆注册页面;

完成:

  1. 总结应用的功能框架;
  2. 总结应用的文件结构;
  3. 基本完成登陆和注册页面的开发,但是没有记住密码自动登录的功能,因此每次都需要登录,较为繁琐。

参考资料:

仿京东登陆界面

2015/05/14         星期五

完成:

  1. 毕设总结,致谢;

  2. 整理开发过程中所参考的资料;

原文地址:https://www.cnblogs.com/fansen/p/4497875.html