我已按照本文创建自定义内容提供商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是单项还是多项。
标准方法是什么?我完全对此感到困惑,无法在任何博客或论坛上找到合适的答案。
答案 0 :(得分:4)
首先,您真的希望将所有数据逻辑从您的应用程序逻辑中抽象出来并进入contentProvider。这只是一种很好的做法。如果数据架构发生变化怎么办?
尝试通过附加ID来构建特定于id的URI String:
Uri singleUri = ContentUri.withAppendedId(CONTENT_URI, 2);
然后使用URI匹配器开关案例的特定分支构建您的查询。
答案 1 :(得分:0)
是的,您必须为Item类型和Dir类型(许多项目)具有单独的逻辑
在项目类型下,您可以直接删除项目。因为你确切知道你的物品。 在目录类型下,您可以使用where子句来过滤需要删除的项目。