Android 单个项目的内容提供程序uri与项目列表的uri

Android 单个项目的内容提供程序uri与项目列表的uri,android,Android,我跟随本文创建了一个自定义内容提供者。我面临的问题是URI和URIMatcher。我知道我们可以使用urimatcher来匹配单个项目的uri和项目列表的uri。但是,如果我不使用任何uri匹配概念,例如我可以编写 CONTENT_URI is "pete.android.contentprovider" String where = BaseColumns.COLUMN_ID + "?" getContentResolver.delete(CONTENT_URI, where, new Str

我跟随本文创建了一个自定义内容提供者。我面临的问题是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是用于单个项还是用于多个项


标准方法是什么。我完全不明白这一点,在任何博客或论坛上都找不到合适的答案。

首先,你真的想把所有数据逻辑从应用程序逻辑中抽象出来,放到contentProvider中。这只是一种良好的做法。如果您的数据模式发生更改怎么办

尝试通过如下方式附加id来构建特定于id的URI字符串:

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

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

首先,您确实希望将所有数据逻辑从应用程序逻辑中抽象出来,并放到contentProvider中。这只是一种良好的做法。如果您的数据模式发生更改怎么办

尝试通过如下方式附加id来构建特定于id的URI字符串:

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

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

是的,您必须为项目类型和目录类型(许多项目)提供单独的逻辑

在“项目类型”下,您可以直接删除项目。因为你对你的物品了如指掌。
在目录类型下,您可以使用where子句作为逻辑,您需要筛选需要删除的项目。

是的,您必须为项目类型和目录类型(许多项目)提供单独的逻辑

在“项目类型”下,您可以直接删除项目。因为你对你的物品了如指掌。
在dir type下,您可以使用where子句作为逻辑,您需要筛选需要删除的项。

答案不错,但如果我想在singleUri中传递字符串而不是数值,该怎么办。再次表示开关盒。如果我想传递2个数值/字符串值,意味着数百个开关案例,该怎么办。如何处理这个问题?这是一个很好的答案,但是如果我想在singleUri中传递一个字符串而不是一个数值呢。再次表示开关盒。如果我想传递2个数值/字符串值,意味着数百个开关案例,该怎么办。如何处理这个问题?我看到很多帖子甚至没有在内容提供者中实现getType方法。我目前正在构建一个内容提供者,它可以处理任何类型的查询,但如果有数百个不同的uri,我就无法处理。因此,我认为不使用uri,用户可以执行任何类型的sqlite查询。不是吗?一种资源类型需要两个不同的URL。更多参数由where子句(selection和SELECTIONAGUMENTS)处理。看到这里,java.lang.String[],java.lang.String,java.lang.String[],java.lang.String)我看到很多帖子甚至没有在content provider中实现getType方法。我目前正在构建一个内容提供者,它可以处理任何类型的查询,但如果有数百个不同的uri,我就无法处理。因此,我认为不使用uri,用户可以执行任何类型的sqlite查询。不是吗?一种资源类型需要两个不同的URL。更多参数由where子句(selection和SELECTIONAGUMENTS)处理。看到这里,java.lang.String[],java.lang.String,java.lang.String[],java.lang.String)这只是一个示例代码:-)我通常只是将路径中的id(如果存在)转换为请求中的“id=?”之类的内容。我认为这更简短,你是说Uri.withAppend吗?这意味着要做很多开关盒,对吗?添加一个字符串而不是一个数值,然后添加两者的组合怎么样。简言之,许多用例将很难编写和维护……这只是一个示例代码:-)我通常只是将路径中的id(如果存在)转换为请求中的“id=?”之类的内容。我认为这更简短,你是说Uri.withAppend吗?这意味着要做很多开关盒,对吗?添加一个字符串而不是一个数值,然后添加两者的组合怎么样。简而言之,许多用例将很难编写和维护。。。