内容提供者uri用于单个项目与uri到项目列表

时间:2013-10-08 10:00:46

标签: android

我已按照本文创建自定义内容提供商http://xjaphx.wordpress.com/2011/06/19/create-and-use-custom-content-provider/。我面临的问题是URI和URIMatcher。我知道我们可以通过urimatcher来匹配uri的单个项目与uri的项目列表。但是,如果我不使用任何uri匹配的概念,例如我可以写

CONTENT_URI is "pete.android.contentprovider"
String where = BaseColumns.COLUMN_ID + "?"
getContentResolver.delete(CONTENT_URI, where, new String[]{"2"})

上述查询将从数据库表中删除2行。如果我可以通过使用where子句直接执行此操作,那么为什么我应该在delete函数中使用switch case来确定uri是单项还是多项。

标准方法是什么?我完全对此感到困惑,无法在任何博客或论坛上找到合适的答案。

2 个答案:

答案 0 :(得分:4)

首先,您真的希望将所有数据逻辑从您的应用程序逻辑中抽象出来并进入contentProvider。这只是一种很好的做法。如果数据架构发生变化怎么办?

尝试通过附加ID来构建特定于id的URI String:

Uri singleUri = ContentUri.withAppendedId(CONTENT_URI, 2); 

然后使用URI匹配器开关案例的特定分支构建您的查询。

答案 1 :(得分:0)

是的,您必须为Item类型和Dir类型(许多项目)具有单独的逻辑

在项目类型下,您可以直接删除项目。因为你确切知道你的物品。 在目录类型下,您可以使用where子句来过滤需要删除的项目。