使用安卓手机,基于 Kotlin 语言和Jetpack Composer搭建用户界面,实现智能衣柜的软件部分。
智能衣柜Android应用程序旨在通过智能功能(如衣物推荐、远程控制和环境监测)来增强衣物管理。应用程序采用MVVM架构,确保关注点分离和高效的数据管理。
- 登录模块:处理用户身份验证和绑定衣柜信息。
- 远程控制模块:显示和控制衣柜的各种物理和环境参数。
- 衣物管理模块:根据用户偏好和天气情况管理和推荐衣物。
应用程序采用MVVM(Model-View-ViewModel)架构,包含以下层次:
- 视图层(View Layer):处理UI和用户交互的Activity和Fragment。
- 视图模型层(ViewModel Layer):管理UI相关数据和业务逻辑。
- 模型层(Model Layer):定义数据结构和处理数据操作。
- 仓库层(Repository Layer):管理数据源并同步本地和远程数据。
应用程序使用Android的导航组件管理不同屏幕之间的导航。主要屏幕包括:
- 登录活动(Login Activity):用户身份验证的入口点。
- 主活动(Main Activity):主导航图的宿主,包括衣物管理和远程控制的片段。
应用程序与OneNet物联网云平台和彩云天气API进行通信。网络操作使用Retrofit和OneNet SDK进行管理。
OneNet SDK用于与物联网云平台通信。数据流涉及通过定义的回调方法发送和接收数据,处理网络状态和异常。
- 接收数据:通过
onReceiveData()
方法接收来自云平台的数据。当检测到刷新标志时,应用程序会向云平台发送请求,利用OneNet SDK查询最新的数据点。接收到的数据由ReceiveDataCallback
回调类处理,包括处理成功接收的数据情况和数据接收异常的情况。 - 发送数据:发送缓存利用
LiveData
设计,用于监听待发送数据的到达,检查网络连接状态并进行异常处理。如果网络连接状态正常且发送缓存更新,通过发布订阅机制调用onSendData()
方法发送数据。发送过程的检验依赖于回调机制,由SendDataCallback
类处理,根据响应状态更新发送状态。
Retrofit用于从彩云天气API获取天气数据。它处理HTTP请求和响应,数据解析由Moshi管理。
- 定义接口:首先定义一个网络接口,使用注解来描述HTTP请求的方法(如GET和POST方法)、接口定义为彩云天气API的基类URL和请求所需的附加参数。
- 创建请求 :当Retrofit实例化时,利用Java的反射机制为接口动态创建代理,使用OkHttp客户端执行实际的HTTP请求。请求包含了注解和参数中的URL、HTTP方法、请求头、请求体等信息。
- 处理响应 :OkHttp客户端负责请求的预处理和后处理。返回响应后,代理对象利用转换器(如Moshi)将JSON格式的响应体转换成Java对象,应用程序可以直接访问数据类对象来读取数据。
- UI设计:现代简洁的界面,用户友好的组件。
- 逻辑处理:包括用户输入验证、身份验证和登录成功后导航到主活动。
登录界面采用现代简洁的设计风格,主要组件包括:
- 顶部图像:绿色图像,提供视觉引导。
- 卡片视图容器:包裹整个登录信息部分,设计了多个文本视图显示提示信息。
- 输入框和按钮:用户名和密码输入框分别放置在独立的线性布局中,每个输入框都搭配了合适的图标和输入提示。
登录活动类负责计算和校验等逻辑处理:
- 初始化:通过
ViewModelProvider
初始化登录视图模型实例和视图绑定。 - 动态更新:观察
LoginFormState
和LoginResult
两个LiveData对象,动态更新登录按钮的状态,并显示用户名和密码的错误信息。 - 登录验证:用户在输入用户名和密码时,使用
afterTextChanged()
函数监听文本变化,验证输入的合法性。点击登录按钮时,调用视图模型的login()
方法,更新LiveData对象,触发界面更新。
- UI组件:实时显示衣柜的温度、湿度、灯光状态等参数。
- 控制机制:通过UI调整参数,发送控制命令至衣柜。
控制台片段负责用户界面的交互逻辑,控制台视图模型保存LiveData形式的后台数据,提供数据处理和转换逻辑,并设置与物联网平台进行网络通信的接口。
- 视图绑定和LiveData:视图绑定使编译器为每个XML布局文件生成一个绑定类,取代
findViewById()
方法。LiveData作为可观察的数据类,当数据发生变化时通知观察者进行更新。
用户可以通过界面上的开关和滑动条调整温度和灯光的开关状态及参数。这些命令会使LiveData数据同步到控制台的视图模型,通过一定条件判断后发送控制命令或更新状态。
- UI设计:包括搜索栏、类别过滤按钮和衣物列表。
- 衣物推荐算法:根据用户偏好和天气情况计算衣物评分,使用穿衣指数、温度、湿度和历史穿着记录等因素。
衣物管理模块的UI设计包括:
- 搜索栏:快速查找特定衣物。
- 分类过滤按钮:提供多种衣物类别选择。
- 衣物列表:采用循环视图组件,展示衣物的图片、名称、描述等信息。
循环视图的主要部件包括适配器(Adapter)、视图持有者(ViewHolder)和布局管理器(LayoutManager):
- 适配器:负责数据绑定和视图创建。
- 视图持有者:持有每个项的视图引用。
- 布局管理器:管理循环视图中各项的布局和显示。
衣物推荐算法根据天气、穿衣指数、历史穿着记录等因素计算推荐评分。评分格式为0-5的浮点数。算法包括以下步骤:
- 遍历衣物列表:忽略不在衣柜中的或不干净的衣物。
- 计算评分:
- 穿衣指数评分:根据穿衣指数计算,匹配度较高的衣物得分更高。
- 温度评分:根据衣物材质和当前温度范围计算。
- 湿度评分:根据衣物材质和当前湿度范围计算。
- 历史穿着评分:根据上次穿着日期计算。
- 加权汇总:对各项评分乘以对应权重,应用自定义的Sigmoid函数进行非线性处理。
- 缩放处理:将综合评分的范围缩放到0-5之间。
推荐算法旨在综合考虑各因素的影响,为用户提供智能化的衣物推荐。