3

我基本上完成了我正在开发的应用程序(我的第一个!),除了实现任何数据保存机制。不久前我研究了这些选项,并认为 SQLiteDatabase 是最好的选择,但是我很难弄清楚如何准确地实现它,所以我把它留到了完成程序的其余部分。从那以后,我每次在我的设备上运行它时都重新输入所有值来测试它。

该应用程序从屏幕上基本上没有任何内容开始。用户添加玩家(通过菜单和对话框)。一旦玩家列表最终确定,用户点击对话框中的“保存”。然后每个玩家的 Table Row 动态膨胀并包含一个 Button、几个 ImageView 和一个 TextView,所有这些都显示每个 Player 的各种属性。这对我的问题并不重要。

所以,我的应用程序基本上只会跟踪 Player 对象。我的数据库对象都是以此为指导构建的:http : //www.androidhive.info/2011/11/android-sqlite-database-tutorial/,大部分情况下将“联系人”替换为“玩家”。

我难以理解的是在哪里实现每个玩家对象的“保存”和“加载”,以及在主 Activity 的 onCreate、onResume 和 onStop 方法中做什么。我已经研究了好几个小时了,我了解到我还应该实现一个 AsyncTask,但这更加复杂,我什至无法将基本数据加载到我的大脑中,更不用说异步执行了.

在我正在阅读的 Deitel 开发人员系列中名为“Android for Programmers: An App-Driven Approach”的书中,有一个关于如何实现 AsyncTask 和 SQLiteDatabase 的很好示例,但在他们的示例中,他们在 ListActivity 中使用了 CursorAdapter,所以我不知道如何使它适用于我的情况。(我的是一个 TabActivity,我上面解释的只是一个“查看玩家”选项卡。)

当用户在“添加玩家对话框”中单击“保存”时,将玩家添加到数据库中对我来说是有意义的,但我不明白在哪里重新加载玩家对象以及在哪里重新填充每个玩家的表格行。

很抱歉,我没有发布更精确的代码,但这更像是一个普遍的问题,我宁愿不发布我的整个应用程序,因为它大约有一千行长。任何帮助将不胜感激,我尽量不要在这里发布每件小事,但这些东西让我很沮丧!

4

2 回答 2

1

我和你有同样的书。我关注了 AddressBook 应用程序(它处理 DatabaseConnector),它对我有很大帮助。现在,我可以与您分享我的代码(我已经按照另一个 Android Hive 教程通过 SQL/PHP 脚本登录/注册),然后成功地将其转换为使用 ASyncTask。话虽如此,我现在正在处理的部分是重新实现本地 SQLite 数据库:我需要让它存储登录用户的电子邮件等,以便我可以在屏幕上显示此信息。此外,我有一个页面,用户可以在其中提交更多信息(年龄、国籍等),然后应用程序会将这些数据与其他帐户信息一起存储在 SQL 服务器上

所以正如我所说,我很乐意与您分享这段代码,但它并不是您正在寻找的,因为它是一个网络数据库而不是本地 SQLite 数据库。它将具有 SQLite db 方面,我只是还没有完成那部分。

最后,我确实从你的 Deitel 书中推荐了 AddressBook,它真的帮助了我。

于 2012-04-01T19:45:34.710 回答
0

当涉及到配置更改(例如手机旋转)时,AsyncTasks 很痛苦,而且很容易造成内存泄漏。你应该使用加载器。别介意这个名字,它也可以用来写数据——基本上是在后台完成的每一个操作。更具体地说,我将使用AsyncTaskLoader并在loadInBackground()方法中放置一个数据库助手来选择或插入数据。数据库助手应该是 SQLiteOpenHelper 的扩展,并且它只能被实例化一次,所以我建议将它放在应用程序上下文中并从那里获取引用。

希望能帮助到你。

于 2012-04-01T19:16:04.343 回答