在应用程序中实现过滤时,我有几个与官方 LoaderManager 示例相关的问题(即 SQLite 数据库,使用 Content Provider,在不使用过滤时使用 CONTENT_URI,或者通过连接 CONTENT_FILTER_URI 和mCurFilter
变量的内容形成过滤的 URI .
首先,我需要确认我正确理解了过滤 URI。早些时候,我CONTENT_URI
在实现. _ _ 我不明白为什么其他人使用特殊的 CONTENT_FILTER_URI。selection
selectionArgs
sortOrder
new CursorLoader(...)
onCreateLoader
LoaderManager.LoaderCallbacks<Cursor>
官方示例通过null
,selectionArgs
过滤器值可能被提取filter = uri.getLastPathSegment();
并添加为用于selectionArgs
。在我的情况下,我也在内容提供者中传递null
并selection
形成它,例如:
selection = ProductTable.COLUMN_NAME + " like ?";
selectionArgs = new String[]{ "%" + filter +"%" };
我现在的理解是:
- 除了简单的单一 SQL 命令之外,过滤器值还可以以其他方式使用,这就是使用
CONTENT_FILTER_URI
. - 这
CONTENT_FILTER_URI
使得获取信息更加抽象,即更少的 SQL 特定,更多的 web 服务,如访问数据。
对此,我仍然很困惑,为什么sortOrder
URI 也没有以某种方式表达。这是一种权衡吗?(希望官方的例子干脆不要走马观花,select
在内容提供者之外形成论据是有实情的。)
我应该总是解析用户输入的过滤器值吗?原因是用户可以输入任何过滤值——也可以插入禁止字符。这样可以形成未知的 URI 路径,并且可能无法识别 URI。或者更糟糕的是,有可能进行某种 SQL 注入,或者至少应用程序可能会崩溃。在考虑 URI 和注入错误时,我是否过于偏执?developer.android.com或其他地方是否提到了一些与问题相关的规则或工具?