1

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

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

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

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

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

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

我真的需要一些关于如何管理这样的应用程序的提示。

谢谢

4

1 回答 1

1

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

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

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

1)您可以做的是每次加载屏幕时,例如“ ListCarsActivityonResume()运行时,您需要首先调用您的本地数据库,获取您最近的数据,然后将这些结果显示到屏幕,您的ListView等。这将提供更快的反馈给用户。

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

简而言之:

  1. 加载屏幕,并使用本地 FAST 数据库汽车列表填充列表
  2. 立即异步下载更新的汽车数据并同步本地数据库
  3. 刷新汽车列表。

您可以在整个应用程序中使用此原则。

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

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

注意:您还需要一个简单的 IF 语句围绕每个 WS/Async 调用,因此应用程序不会尝试连接到服务器,除非您有 Internet 连接。允许您的应用在“离线”时显示仍在工作(可能是过时的数据)。

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

于 2013-03-06T03:39:34.920 回答