我使用SQLite支持的ContentProvider在本地缓存服务器数据。我想在整个ContentProvider中附加一个时间戳,这样我就可以通过比较时间戳和服务器的时间戳来快速检查数据是否是最新的。一个简单的解决方案是拥有更新列。但这是一个坏主意,因为我会复制每一行的数据;而我只想要一次数据。有没有办法将这些数据保存到磁盘而不必每次都复制它?我成像一个SharedPreference-Cursor组合可以做到这一点。但是,有没有办法在SQLite数据库本身中保存这些数据?或者至少在ContentProvider中,并且能够在需要时查询它?根据我的理解,contentProvider有一个必须与ContentResolver匹配的set接口。那么如何在内容提供商中保存时间戳并能够从我的应用程序中读取它:不必在每一行中都这样做?
创造性地我只能为时间戳创建一行表。但这是最好的答案吗?或者有更标准的方法吗?
我知道我似乎对自己的问题(即一行的时间戳表)有了答案,但如果有一种标准或更好的方法可以做这种事情,我不想破解它。 / p>
答案 0 :(得分:0)
我对SharedPreference-Cursor组合成像可以做到。
如果它仅由您的提供商在内部使用,则SharedPreferences将正常工作。即使你确实需要在Cursor中使用它,如果你只有一个URI来查询时间戳,你可以使用MatrixCursor
以编程方式构建一个Cursor,其中只有一个值。
创造性地我只能为时间戳创建一行表。但这是最好的答案吗?或者有更标准的方法吗?
这也可以。如果您确实需要此时间戳显示在某些查询返回的所有行中,这可能是一个更好的选项,因为您可以简单地与此表连接以生成在所有行上都具有timestamp值的游标。
根据我的理解,contentProvider有一个必须与ContentResolver匹配的设置界面。
这只能确定ContentProvider签名的方法。您的query
方法实际上没有查询SQLiteDatabase的规则。我再次推荐你MatrixCursor
。
您可能感兴趣的最后一件事是ContentResolver.call()
。您可以使用它来实现自定义方法,并将数据传递回Bundle
中的调用方。只需覆盖ContentProvider中的call()
并正确处理参数。