在Android应用中同步数据

时间:2013-03-06 03:29:40

标签: java android

我正在开发一个应用程序,它几乎可以在每个Activity中通过JSON同步不同的数据。这些数据可以被其他设备操纵,所以我必须尽可能地保持更新。

例如,在第一个Activity中,我登录到webservice,在下一个Activity中,我使用AsyncTask下载一个JSON,告诉我商店中的所有汽车模型,并使用该信息创建ListView。单击一行,我调用另一个AsyncTask来下载关于该汽车的特定信息(JSON),并获取有关它的轮胎的信息。在下一个活动中,我正在调用另一个AsyncTask来获取有关这些轮胎的具体信息。大多数情况下,在下一个Activity中使用的必需信息存储在SharedPreferences中,因为我不知道如何在整个应用程序中访问ArrayLists,我不知道它是否会使用大量的RAM。如果通过应用程序共享这么多对象是个好主意。

您可以看到,每次重新加载Activity时,AsyncTask都会检查连接并下载要显示的新数据。该服务不支持推送,所以我想我每次都有责任检查它,对吗?

要考虑的另一件事是可以更改下载的数据,在这种情况下,我必须上传JSON,并相应地刷新视图。在这方面,我不知道如何在连接断开时保存要上传的“更改”。比如,创建一个排队的未同步任务列表。

结果是一个严重依赖互联网连接的应用程序,并且每次恢复活动时都会感觉很慢。

在大多数情况下,我实例化一个新的对象ArrayList(汽车,轮胎等),但我很困惑如何在JSON中正确同步数据,如果现在一切都是对象的话。也许使用GJON?

我真的需要一些关于如何管理此类应用的提示。

由于

1 个答案:

答案 0 :(得分:1)

我的想法很快。因为我有2个非常相似的应用程序...即,与在线服务/数据库紧密耦合。

你真的需要一个使用sqlite的本地数据库。

以下是我建议您如何处理当前从服务器下载数据以显示的每项活动的示例:

1)您每次加载屏幕时都可以做的事情,例如" ListCarsActivity"当onResume()运行时,您需要首先调用本地数据库,获取最新数据,然后在ListView等屏幕上显示这些结果。这将为用户提供更快速的反馈。

2)在此之后,在onResume()中,您需要调用一个WebService对象说WSGetCars,它将启动Async任务到 A)连接到服务器,下载JSON / XML,解析数据并更新数据库(添加或更新等) B)通过帮助对象访问活动重新运行数据库调用,刷新列出新数据。

简而言之:

  1. 加载屏幕,并使用本地FAST数据库汽车列表填充列表
  2. 立即和异步下载更新的汽车数据并同步本地数据库
  3. 刷新车清单。
  4. 您可以在整个应用中使用此原则。

    您是否使用我对Web服务对象的建议取决于您。但我通常有Activity调用WS对象进行下载,然后使用XML解析对象等等。

    希望这在概念层面上有所帮助

    注意:您还需要围绕每个WS / Async调用的简单IF语句,以便除非您具有Internet连接,否则应用程序不会尝试连接到服务器。允许您的应用在"离线" (无论如何,可能是过时的数据)。

    关于登录屏幕:您可以使用SharedPreferences检查每次加载时是否已经登录,如果已登录,则自动加载系统的内部页面。我的应用程序不允许在没有互联网连接的情况下登录。因此,如果在最后状态下他们已经登录,这允许应用程序仍然有效。