Content Provider,CONTENT_FILTER_URI ...如何正确形成过滤URI?

时间:2013-06-06 11:01:06

标签: android uri android-contentprovider

在应用程序中实现过滤时,我有几个与official LoaderManager example相关的问题(即SQLite数据库,使用Content Provider,未使用过滤时使用CONTENT_URI,或者通过串联CONTENT_FILTER_URI形成URI进行过滤) mCurFilter变量的内容。

Fistly,我需要确认,我才能正确理解过滤URI。之前,我确实使用了CONTENT_URI并设置了selectionselectionArgs,和sortOrder在实施new CursorLoader(...)的活动的onCreateLoader方法中创建LoaderManager.LoaderCallbacks<Cursor>时。我不明白为什么其他人使用特殊的CONTENT_FILTER_URI。

官方示例为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 中以某种方式表达。这是一种权衡吗? (我希望官方示例不采用slopy方法,并且确实有理由在内容提供者之外形成select参数。)

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

0 个答案:

没有答案