我对java很新,想要求设计方面的帮助。我将在java中为android构建一个简单的调查应用程序。
以下是我看到应用的方式:
主页面( activity_main )包含用于ID的 LineEdit 和两个按钮:登录和 SignUp 。此活动 onCreate 从DB加载所有注册用户和问题。
注册页面( activity_signup )包含多个用于用户信息的 LineEdit 字段以及 SignUp 按钮。它还提供免费的ID onCreate 。
个人资料页面( activity_profile )包含一些用户信息(可能是 TextView ),可能还有调查按钮。
调查页面( activity_survey )包含问题,答案和两个按钮:上一页和< EM>下一步
请提及是否可以改进。
问题:
我应该将所有用户和问题存储为class MainActivity
或其他地方的私有字段吗? (假设DB非常小,完全适合RAM)
如何使用 activity_signup 中新创建的用户修改数据库?这是一个相当普遍的问题,比如我如何从保留封装的其他活动中访问私有字段?
我想在private static User current_user
中添加class ProfileActivity
这样的字段。但我只能从DB获取用户,DB是class MainActivity
的私有字段。如何将用户从 activity_main 传递给 activity_profile (再次保留封装)?
activity_survey 包含不同类型的答案,例如是/否;单/多选(+你的变种)等。如何在java中处理这个?我的想法是使用方法class AbstractQuestion
创建一个抽象的fillLayout
,并从中继承几个class ConcreteQuestion
(此处具体应该用适当的标题替换),其中包含特定类型问题的实现。将所有问题存储在AbstracQuestion
的数组中。它在java中是可行的还是有更正确的方法来做到这一点?
提前感谢您的帮助!
答案 0 :(得分:1)
如果您的数据很复杂,并且您认为使用SQLite查询检索它很容易,那么SQLite数据库就是您的选择。您可以使用ContentProvider访问它,可以从您拥有Context的任何地方查询。
您还可以使用简单的Serializable
类将其本地存储在内部或外部存储上。想象一个单个对象,我们称之为Database
Serializable
并包含您需要的所有数据。您可以在App启动时加载它(如在扩展的Application类中)并存储引用,这样就不会收集垃圾。然后,您可以从您可以编写的Application静态方法访问它以获取引用。它可能是实现具有相当复杂结构的简单存储的最快方法,但如果您的数据“很大”,这可能不是最好的。它会增加你的App开始时间(最好使加载和保存操作异步)。
如果您的数据很简单,您可以使用SharedPreferences存储“键值”数据。这有点像第二种方法,但使用Android框架来完成它。
选项2和3要求您的数据是Serializable或Parcelable。正如Android所说,Parcelable不应该用于持久性而是用于通信,让我们跳过那个。 您可以使对象Serializable或使用ie Gson库将它们转换为json对象。并存储那些序列化的json对象。将它们直接序列化可能是更快的方法,但有时保持jsons更有意义。
你不能也不应该这样做。
如果您不想将数据保存在静态字段中,请将它们移动到扩展的Application
类(确保您使用特定的xml参数将其指向AndroidManifest.xml)并从那里访问它。只要您Application
通过Context
投放到自定义类,就可以访问context.getApplicationContext()
课程。
要告诉Android使用您的自定义Application类,请在AndroidManifest.xml中使用以下内容:
<application
android:name=".YourAppClass"
...>
...
</application>
Map<Question,List<Answer>>
然后&lt; - 任意类名称来表示(这些也可以是枚举)