在TabActivity中实现SQLiteDatabase和AsyncTask的位置/方式

时间:2012-04-01 16:09:25

标签: android android-asynctask sqliteopenhelper

我基本上已经完成了我正在开发的应用程序(我的第一个!),除了实现任何数据保存机制。我前一段时间研究了这些选项并决定使用SQLiteDatabase是最好的,但是我很难理解如何实现它,所以我离开它直到我完成剩下的程序。从那以后,我只是在每次在设备上运行时重新输入所有值来测试它。

该应用程序从屏幕上基本上没有任何内容开始。用户添加播放器(通过菜单和对话框)。完成播放器列表后,用户单击对话框中的“保存”。然后每个玩家的表行动态膨胀并包括一个Button,一些ImageView和一个TextView,它们都显示每个玩家的各种属性。这对我的问题并不重要。

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

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

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

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

对不起,我不是要发布更准确的代码,但这更像是一个普遍的问题而且我不想发布我的整个应用程序,因为它大约有一千行。任何帮助都将不胜感激,我尽量不在这里发布每一件小事,但这些东西让我感到沮丧太久了!

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

AsyncTasks在配置更改(例如电话的旋转)方面很痛苦,并且很容易造成内存泄漏。你应该使用Loader。不要介意这个名字,它也可以用来写数据 - 基本上用于在后台完成的每个操作。更具体地说,我将使用AsyncTaskLoader并在loadInBackground()方法中,我将数据库助手放入SELECT或INSERT数据。数据库助手应该是SQLiteOpenHelper的扩展,并且它只能被实例化一次,所以我建议将它放在应用程序上下文中并从那里获取引用。

希望它有所帮助。