Android 在中心对象中存储来自多个类的数据

Android 在中心对象中存储来自多个类的数据,android,save,singleton,Android,Save,Singleton,我有一个应用程序在很大程度上依赖于来自Web服务的JSON响应。应用程序的所有部分都包含从这些响应生成的对象,这意味着这些数据对于应用程序的正常运行非常重要 目前,每次用户打开应用程序的某个功能(例如新闻、音乐、图片等),Web服务都会被查询并用所需的数据进行响应。然后,这些数据被解析并用于向用户显示他们选择的内容。 问题是,这个过程非常不友好。特别是对于连接速度较慢的手机,加载和解析数据可能需要几秒钟,更不用说下载将要显示的图片了。 如果用户关闭该函数,然后再次打开它,则所有数据都会被重新下载

我有一个应用程序在很大程度上依赖于来自Web服务的JSON响应。应用程序的所有部分都包含从这些响应生成的对象,这意味着这些数据对于应用程序的正常运行非常重要

目前,每次用户打开应用程序的某个功能(例如新闻、音乐、图片等),Web服务都会被查询并用所需的数据进行响应。然后,这些数据被解析并用于向用户显示他们选择的内容。 问题是,这个过程非常不友好。特别是对于连接速度较慢的手机,加载和解析数据可能需要几秒钟,更不用说下载将要显示的图片了。 如果用户关闭该函数,然后再次打开它,则所有数据都会被重新下载和解析

因此,我想将最常用的数据保存在一个中心类/对象中。由于该数据在用户使用应用程序时不太可能更改,因此应该可以将所需数据保存在某个位置,以防用户重新打开刚刚关闭的功能


但是我怎么会做这样的事呢?我读过关于Singleton之类的东西,但是如何将来自20多个不同类的数据添加到Singleton对象中呢?我如何检索这些数据并将其添加到用户重新打开函数时的新意图中(如果可能的话)

一个建议,但不一定是最好的方法,我不确定我是否正确解释了您的问题

您是否能够将其存储在sql lite数据库或sd卡上

对于音乐和图像,您可以将sd卡上项目的路径存储在DB中


然后在每次加载应用程序或调用“数据是否已更改”链接时,每当数据更改时更新数据库?

我在高分游戏中也面临类似问题-高分列表很大,并且来自HTTP Get请求的JSON。我使用: -singleton highscore服务负责缓存本地JSON副本,处理从HTTP等的检索。由于加载highscore需要时间,它还执行异步处理,并在新的highscore可用时启动广播(游戏活动需要时接收广播) -定时BroadACAST的广播接收器,用于执行定期高分数同步

我使用自己的数据绑定库存储JSON数据:


使用SQLite(db)和contentprovider。。。下面是一个例子:它在开始时进行同步,或者如果您在主活动中使用“菜单->同步”强制同步对不起,我可能应该更清楚地说明我当前的情况,但我会为您列出其中一个问题。现在,该应用程序包含一个选项,可以显示特定乐队的专辑列表。这些专辑都有专辑封面、标题、专辑信息等等。每次用户选择波段时,都会加载所有这些数据。现在保存所有这些数据不会有什么问题,但是用户可以更改他们想要签出的乐队。这意味着,如果我将所有数据保存在一个数据库中,这个数据库可能会快速增长,而音乐本身也不必保存,因为它是流式传输的(此外,保存几十个4MB或更大的MP3文件可能有点麻烦)。如果可能的话,我现在只想保存乐队的照片。是否可以将这些数据保存到SD卡/数据库中,如您所说,在应用程序加载时检查数据是否已更改?仅存储一个选项,sqlite可能有点过分,但它可以工作。Sqllite即使在应用程序关闭时也会存储它,以便在用户下次打开它时保存它。我想你会有一个唯一的乐队参考号和版本号,然后打电话给网站询问dat是否改变了。。然后更新它,如果它有。然后,当用户选择不同的波段时,只需删除所有存储的数据并添加新的内容。另一种想法是,您可以将其保存在SharedReferences中,并且仍然有一个到sd卡的链接,这将节省整理sql lite数据库的时间?这是我在大声思考,因为我不完全确定当应用程序关闭时是否会保存。。但请查看此链接:有几个数据存储选项。(只是检查了一下,即使在应用程序关闭后它也会存储)嗯,很有趣。然后我会调查SQLite区域。遗憾的是,我不能使用你的建议来检查使用网站/Web服务的正确/错误,因为我正在为一个实习项目工作,我不能实际更改Web服务/请求更改Web服务。但是,由于在数据库中保存数据后仍然可以接收JSON响应,我猜我可以检查DB中的mediaID(您可以将图像和一些数据保存为一条记录,就像在普通SQL数据库中一样?)是否等于响应中的mediaID。嗯,很有趣,谢谢!