我正在构建一个应用程序,用户将控制一些滑块,根据这些滑块产生输出,然后输出将被保存,以便他们可以滚动浏览历史记录。滑块将被标记有分配的信息和属性,滑块的输出将被程序化地生成(除了一些预编码的示例)。因此,例如,如果三个滑块是“红色”、“绿色”和“蓝色”,则一直滑动红色和绿色滑块将输出“黄色”,然后“黄色”将与当前日期和时间一起保存在用户的历史记录中。所有这些都将在设备上完成,没有来自或去往服务器的任何内容。
在数据管理端,这看起来像是三个数据库,每个数据库都与其他数据库有多对多的关系。即,每个滑块将附接到多个输出,并且每个输出可以附接到多个滑块;然后,尽管每个时间戳将仅被附加到一个输出,但是每个输出可以被附加到多个时间戳。
为了实现这一点,我认为我需要使用SQLite + Room进行数据管理。我设想一个表用于滑块,第二个表用于输出,第三个表用于用户的历史,再加上用于滑块到输出和输出到历史的连接表。
我唯一的编程经验是业余爱好者级别的Web开发,所以Kotlin,SQLite,Room,关系数据库和Android开发对我来说都是新的。我只是想弄清楚我需要学习什么工具来构建这个,这样我就不会花费几周的时间来学习我甚至没有使用正确的工具来完成这项工作。我不知道我不知道什么,所以任何帮助都很感激。
2条答案
按热度按时间wooyq4lh1#
SQLite/Android Room是适合我的应用的数据库吗?
简而言之,是的。
所有这些都将在设备上完成,没有来自或去往服务器的任何内容。
那么SQLite/Room将是合适的,因为每个设备都有自己的数据库。
在数据管理端,这看起来像是三个数据库,每个数据库都与其他数据库有多对多的关系。
只需要一个数据库,可能只有一个表,不需要关系。
我不知道我不知道什么,所以任何帮助都很感激。
也许可以考虑下面的工作演示,它似乎可以沿着您的需要做一些事情:
所以首先
@Entity
注解类(表)SliderHiistory:-*sliderHistoryId列是一个特殊的列,因此,它唯一标识行(第一行为1,下一行可能为2,依此类推)。如果不提供该值,则将由SQLite生成。
*sliderTimestamp列将存储示例创建时的时间戳(日期/时间)(除非通过指定值覆盖,否则不会被覆盖)
*sliderDescription允许保存描述,这可能对最终用户有用。
*sliderRed、SliderGreen和SliderBlue将保留3个值。
要访问数据(插入和提取),请使用@Dao注解接口SliderHistoryDao
要将上述内容结合在一起,请使用@Database注解的抽象类SliderDatabase:-
data/data/<the_package_name>/databases
)中名为slider.db的文件中。请注意,为了方便和简洁,演示在主线程上运行(不建议已发布的App在主线程上访问数据库)。伴随对象中的函数getInstance使用了所谓的单例,因此整个过程中只检索数据库类的单个示例。
ActivityMainActivity使用布局activity_main,该布局定义了3个滑块、用于描述的EditText、用于保存数据的Button以及用于显示存储数据的ListView:-
最后,Main_Activity将所有内容联系在一起:-
结果
最初运行时:-
如果在编辑文本中输入了黑色(或任何内容),并单击了保存按钮,则:-
即插入的行现在被显示。
现在如果
现在,如果在列表中单击黑色:-
点击红色:-
等等(当然,中间值将被同样地保存,即,每次都保存所有三个值)。
现在,如果你想提取日期和时间,并让它显示在ListView中,而不是组合的颜色值,然后更改行:
到
将促进这一点,例如:
其他
以下细微的变化使加载的颜色能够被看到,并且还引入了第四个颜色元素(透明度)。
首先,将TextView添加到布局中:
(在3个滑块之后(你可能想要第四个))
然后是一个新的函数(对于演示,包含为MainActivity中的函数):-
}
之间然后在行(在onItemClickListener中)
sliderBlue.value = sh.sliderBlue
之后添加了以下行:有了这个和黑色,红色,绿色,蓝色和白色保存,然后点击不仅设置滑块,但也改变了颜色,例如。
黑色
红色
绿色
等等
ecfsfe2w2#
我建议使用ROOM,因为它更容易实现,并且带有更少的样板代码(Docs)
另外,我看不出你为什么需要三张table。我想你的情况一张table就够了。只需将时间戳、用户和颜色存储在一个表中,并使用时间戳(加上用户)作为主键。