何时以及如何在Android应用程序中将数据保存到数据库

何时以及如何在Android应用程序中将数据保存到数据库,android,android-fragments,android-listview,android-sqlite,android-networking,Android,Android Fragments,Android Listview,Android Sqlite,Android Networking,我试图了解从服务器获取数据并将其存储在数据库中,然后在多选项卡android应用程序中以片段形式显示数据的最佳实践 应用程序结构如下:主活动有3个选项卡,每个选项卡分别有从服务器获取的提要、好友和奖励列表。这些需要点击三个不同的端点,并被分页(提要、奖励、好友信息中的每一个都位于大小为5的页面中) 目前在App.onCreate()方法[App extensed Application]中,我正在访问这些端点的第一页,并将其存储在App.appData对象(一个包含ArrayList提要、Arr

我试图了解从服务器获取数据并将其存储在数据库中,然后在多选项卡android应用程序中以片段形式显示数据的最佳实践

应用程序结构如下:主活动有3个选项卡,每个选项卡分别有从服务器获取的提要、好友和奖励列表。这些需要点击三个不同的端点,并被分页(提要、奖励、好友信息中的每一个都位于大小为5的页面中)

目前在App.onCreate()方法[App extensed Application]中,我正在访问这些端点的第一页,并将其存储在App.appData对象(一个包含ArrayList提要、ArrayList好友、ArrayList奖励的复合对象)中

我应该同时将这些内容保存到数据库中,还是应该在用户暂停应用程序(即,看不到任何活动)并在该回调函数中将app.appData的内容保存到数据库中时进行拦截?否则,我觉得一旦用户浏览并转到下面的页面,从服务器获取数据和写入数据库的周期就会持续很多次

对于此类应用程序体系结构,是否有任何最佳实践/教程

+-----+----+---+                           
|  T1 | T2 | T3|                           
+-----+----+---+  +---------+   +---------+
|      F1      |  |  F2     |   |    F3   |
| +----------+ |  |         |   |         |
| +----------+ |  | +-------+   |  +----+ |
|              |  | |-------+   |  |----| |
|  +---------+ |  | |-----| |   |  |----| |
|  +---------+ |  | +-----+ |   |  +----+ |
|              |  |  Friends|   | Rewards |
|     Feeds    |  |         |   |         |
+--------------+  +---------+   +---------+

我使用类似架构的应用程序。我们从服务器获取数据,并在数据到达时将其存储在数据库中。我们的UI对象从数据库中获取所需的内容。这种体系结构的好处在于UI从不直接依赖于网络——它总是只显示数据库中可用的内容。但是,有许多重要问题会影响这种体系结构是否适合您:

  • 您正在获取的数据多久更改一次?例如,如果用户在几天后运行应用程序,那么在您检查新内容时显示一些旧数据是否合理
  • 您获取的数据有效多长时间?如果您某天获取并存储了大量数据,那么第二天它是否仍然有效,或者您是否需要将其丢弃?如果旧数据是无用的,那么数据库就没那么有用了
  • 您的数据列表有多大?它们会永远消失(例如相关性降低的搜索结果),还是会结束(例如Facebook好友列表)?如果您的列表一直存在,那么将列表存储在数据库中就没有什么帮助了
  • 在我的应用程序中,数据永远不会失效,每天的新数据量很小,数据量也不会大到难以在数据库中管理的程度。这使我们能够始终为UI显示一组良好的数据。然而,根据您对这些问题的回答,数据库可能没有那么有用

    希望这是有帮助的。对不起,我只是随便说说

    编辑: 对于存储,我们只使用SQLiteDatabase和相关类。我在上面写了一个层,将大部分数据保存在内存中以获得更好的性能。当从网络接收到新数据时,我可以快速检查内存映射,查看是否有新的或更新的内容,然后根据需要将其保存到数据库中

    我不确定您是否希望将App.onCreate作为发出请求的主要场所。如果你的应用程序在后台运行了很长时间,但仍在运行,那么你可能没有意识到应该获取新数据。我们为片段使用基类,在onResume中,我们从DB(或内存映射)获取数据,使其始终保持新鲜。您还可以跟踪上次获取数据的时间(在SharedReferences中保留一个时间戳),并每隔4小时左右发出一个新请求


    当新数据可用时,基本片段类也是接收通知的一种方便方法。在onResume中,我们将片段注册为活动片段,在onPause中取消注册它。然后,当网络中有新数据可用时,您只需检查哪些片段处于活动状态,并通知它们。然后,这些片段可以从数据库中提取数据并刷新,就像调用onResume时一样。

    (仅限我)当数据发生更改时,我会立即在本地保存数据。谢谢,您是如何做到的?从某种意义上说,当网络请求(我正在通过改造)失败时,您是否会自动从DB表中提取数据?是否有一个库可以简化这个过程(基本上类似于缓存)?感谢本地发布和与服务器同步是两件完全不同的事情。不要缓存数据库更改。在本地数据库表中设置isDirty、isDeleted位,并在与服务器成功通信时清除isDirty位和/或执行物理删除。服务器上已更改的数据需要推送到应用程序中,这是非常困难的,因为服务器需要知道设备上已经存在哪些内容,以便有效地向下推送更改。哦,我从未使用过改型或截击,因为我在android中的httpurlconnection没有问题。这正是我正在制作的应用。在3个片段中,有一个片段是提要,每3-4小时就会有新的提要(针对该用户);好友列表可能每天更改一次,奖励列表也可能每天更改一次。我能问一下你用的是什么软件包吗?我正在使用改型,我在想什么是最好的坚持?我想在Application.onCreate()中使用改型(异步任务)发出网络/服务器请求,然后将数据从数据库显示到片段以填充其UI。一旦新数据从服务器上传来,我如何与用户界面重新通信呢。这些问题。我有时喜欢这些问题出现的会议,有时不喜欢。我有时会随波逐流,梦想着简化问题的回答,或者思考如果某个非技术人员在几毫秒内就数据处理给出了答案会怎么样。我提出这个问题是因为这是一个重要的决定。@dowjones123不应该像社交应用程序上弹出的“新故事”按钮一样出现提要。@danny117,是的,只是我们的提要的频率要低得多