内容提供商和数据库视图

时间:2014-09-21 13:28:34

标签: android android-sqlite android-contentprovider android-cursoradapter

在我们的应用程序中,我们有5个表,使用ContentProvider从REST服务更新。

- 照片
- 的状态
- 的喜欢
- 的评论
- 的用户

我们将ContentProvider用于所有与数据库相关的调用,并且我们希望使用ListView实现像Activity这样的Feed,该ListView具有扩展CursorAdapter的适配器。

我们的Feed应该显示照片或状态,其中每个照片/状态项都必须显示:

  • 项目的创建者用户名
  • 项目的喜欢数量
  • 项目的评论数量

我们正考虑使用View

实现它
CREATE VIEW event_feed AS 
select * from (
  select "Photo" as type, p.*, u.*, 
    (select count(*) from comments where subjectId = p.id) comment_count, 
    (select count(*) from likes where subjectId = p.id) like_count
  from photos p inner join users u on p.creatorId = u.id
  union
  select "Status" as type, s.*, u.*, 
    (select count(*) from comments where subjectId = s.id) comment_count, 
    (select count(*) from likes where subjectId = s.id) like_count
  from statuses s inner join users u on s.creatorId = u.id
  )
order by createdAt desc

创建它之后,我们将使用ContentProvider查询Cursor


的问题
  • 表现明智,有更好的方法吗?
  • CursorJoiner可以更好吗?

1 个答案:

答案 0 :(得分:1)

性能方面还应考虑到您要进行的时间频率生成(然后重新生成该视图),即用户是否可以使用“拉动刷新”以便查看“新闻源”中的新项目?
假设没有索引视图(通过您发布的查询),并且因为视图基本上是虚拟表
生成视图将像宏一样扩展,并且应该生成相同的计划。
这基本上意味着创建的视图不会添加任何值,除非它被重用。
但就性能而言,您可以最终加入视图加入查看加入视图,当扩展时,提供比预期更复杂的计划。