2

在应用程序中实现过滤时,我有几个与官方 LoaderManager 示例相关的问题(即 SQLite 数据库,使用 Content Provider,在不使用过滤时使用 CONTENT_URI,或者通过连接 CONTENT_FILTER_URI 和mCurFilter变量的内容形成过滤的 URI .

首先,我需要确认我正确理解了过滤 URI。早些时候,我CONTENT_URI在实现. _ _ 我不明白为什么其他人使用特殊的 CONTENT_FILTER_URI。selectionselectionArgssortOrdernew CursorLoader(...)onCreateLoaderLoaderManager.LoaderCallbacks<Cursor>

官方示例通过nullselectionArgs过滤器值可能被提取filter = uri.getLastPathSegment();并添加为用于selectionArgs。在我的情况下,我也在内容提供者中传递nullselection形成它,例如:

selection = ProductTable.COLUMN_NAME + " like ?";
selectionArgs = new String[]{ "%" + filter +"%" };

我现在的理解是

  • 除了简单的单一 SQL 命令之外,过滤器值还可以以其他方式使用,这就是使用CONTENT_FILTER_URI.
  • CONTENT_FILTER_URI使得获取信息更加抽象,即更少的 SQL 特定,更多的 web 服务,如访问数据。

对此,我仍然很困惑,为什么sortOrderURI 也没有以某种方式表达。这是一种权衡吗?(希望官方的例子干脆不要走马观花,select在内容提供者之外形成论据是有实情的。)

我应该总是解析用户输入的过滤器值吗?原因是用户可以输入任何过滤值——也可以插入禁止字符。这样可以形成未知的 URI 路径,并且可能无法识别 URI。或者更糟糕的是,有可能进行某种 SQL 注入,或者至少应用程序可能会崩溃。在考虑 URI 和注入错误时,我是否过于偏执?developer.android.com或其他地方是否提到了一些与问题相关的规则或工具?

4

0 回答 0