Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当将UriMatcher与ConentProvider一起使用时,如何解析查询参数_Android_Sqlite_Android Contentprovider - Fatal编程技术网

Android 当将UriMatcher与ConentProvider一起使用时,如何解析查询参数

Android 当将UriMatcher与ConentProvider一起使用时,如何解析查询参数,android,sqlite,android-contentprovider,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("conten

我有一个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这样的框架处理它们的方式

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