android - 将 UriMatcher 与 ConentProvider 一起使用时如何解析查询参数

标签 android sqlite android-contentprovider

我有一个 ConentProvider 并使用 UriMatcher 来执行适当的 SQL 语句。

代码有效,但我不喜欢从中提取参数的方式 uri 的:

这是失败的:

String badge_id = uri.getQueryParameter("id");
String badge_value = uri.getQueryParameter("badge");

,而且会很理想。

获取参数的正确/最佳方式是什么? 我的 uri 匹配器在工作吗?

电话:

Uri uri = Uri.parse("content://" + USERSSchema.AUTHORITY
+ "/" + USERSSchema.USERSTable.TABLE_USERS + "/id/" + String.valueOf(badgeId) + "/badge/" + String.valueOf(badgeValue));

getApplication().getApplicationContext().getContentResolver().update(uri,null,null,null);

接收者:

    private static final int USERS_UPDATE_ORDER_BY_ID = 1;
    private static final int USERS_CHANGE_ORDER_BY_ORDER = 2;
    private static final int USERS_CHANGE_BADGE = 3; 


uriMatcher.addURI(USERSSchema.AUTHORITY,USERSSchema.USERSTable.TABLE_USERS 
        + "/from_id/#/to_id/#", USERS_UPDATE_ORDER_BY_ID);



uriMatcher.addURI(USERSSchema.AUTHORITY,USERSSchema.USERSTable.TABLE_USERS 
            + "/from_order/#/to_order/#", USERS_CHANGE_ORDER_BY_ORDER);


uriMatcher.addURI(USERSSchema.AUTHORITY,USERSSchema.USERSTable.TABLE_USERS 
            + "/id/#/badge/#", USERS_CHANGE_BADGE);



@Override
public int update(Uri uri, ContentValues contentValues, String selection, String[] selectionArgs) {

              switch (uriMatcher.match(uri)) {

                   case USERS_UPDATE_ORDER_BY_ID :
                        // ....
                        break:

                   case USERS_CHANGE_ORDER_BY_ORDER:
                        // ....
                        break;
                   case USERS_CHANGE_BADGE :

                        String badge_id = uri.getQueryParameter("id");
                        String badge_value = uri.getQueryParameter("badge");

                        **//WHAT IS THE BETTER WAY?** 
                        int badge_segment = 0;
                        for (String segment : uri.getPathSegments()) {
                            switch (badge_segment++) {
                                case  2 :
                                  badge_id = segment;
                                  break;
                                case 4 :
                                  badge_value = segment;
                                  break;
                            }
                        }

                    break;

最佳答案

看起来您混淆了传统意义上的查询参数,以及像 Symfony 这样的框架处理它们的方式。

Uri.getQueryParameter 查找查询字符串 (content://demo?key=value)。要从路径内部获取参数,请使用 Uri.getPathSegments()。

关于android - 将 UriMatcher 与 ConentProvider 一起使用时如何解析查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30935903/

相关文章:

android - 内容值和 SQL 注入(inject)

Android - contentResolver.notifyChange() 降低性能

android getContentResolver().notifyChange() 不重启我的装载机

android - Android SimpleCursorAdapter 和 CursorLoader 的使用

android - Kindle 的 Android 应用程序如何处理字典查找的点击

android - 创建一个新帐户后,我会自动输入它

android - 如何通过通知保持返回堆栈

android - 动态创建微调器并从 SQLite 设置其值

android - ORMLite 查询日期

android - 如何在 WebView 中使用自定义字体