这里有一些有趣的事情 - 我如何显示来自我的内容提供商的信息,以及来自网络的一些实时数据(我不想将其保存到我的内容提供商?)。 / p>
1.CursorLoader和CursorAdapter不会进行IMO,因为我不想将信息保存到我的内容提供商。
2.AsyncTask并更新onPostExecute中的视图无法正常工作,因为我现在通过cursorAdapter等显示来自我的内容提供者的信息,并且由于屏幕本身是AdapterView子类,因此加载完成后,视图可能属于其他元素(已回收)
3.Service不会出现与#2相同的原因(除此之外,在这种情况下,后台线程与UI结合,因此这看起来不像是一个自然的解决方案)
**********如果图片不清晰,则从这里开始可选的具体细节
假设我有一些应用程序允许用户关注股票。 我有一个内容提供者,在路径内容://whatever.my.package.name/follows 有一些关于用户正在关注哪种股票的信息,是否已经发送到我的服务器(所以它确实已经通过它显示了一些“实时'数据”),用户感兴趣的参数以下等等。
显示此信息时,我想在网上添加一些实时信息。我已经实施了必要的方法,但我无法想到一个自然的解决方案(见上文)。特别是,实时数据当然不能保存在同一条路径上(/ follow),因为当我在考虑对象时,这并不是我想到的自然部分"跟随",但我确实想要提供有关股票的实时信息,它确实与屏幕上显示的跟踪相关(例如,跟随包括起始价格,因此我们希望将该起始价格的变化呈现给真实同一股票的时间价格等)。
我无法想到我可以使用的好设计,所以请帮助我们:)
答案 0 :(得分:1)
如果阻止您使用内容提供商的唯一原因是您不想将信息存储在其中,那么请不要存储它。请记住,提供程序只是某些数据源之上的一些抽象。没有人会阻止你使用内存sqlite数据库来存储实时数据。
然后你有两个数据源,可以在它们上构建关系,用于sqlites attach_database或代码中的显示目的。当然,一旦提供程序关闭,实时数据就会消失,因此您必须能够处理该情况。
<小时/> EDIT嗯,好的。所以触动提供者是不行的。你说视图是适配器视图。如何使用Volley或类似的东西来获取适配器本身的数据并将其缓存在那里。每当请求一个视图时(即在#BindView&#39;使用RecyclerView时),请检查适配器缓存中的数据。如果它不存在或已过时则开始获取数据。请求返回时通知适配器数据集已更改。然后,它将再次开始请求视图,使下一个缓存探测器成为命中。如果要获取游标中每个项目的数据,请尝试将项目的索引/位置传递给请求,以便您可以通知适配器特定项目已更改。