2015-06-19 3 views
1

У меня есть ConentProvider и используйте UriMatcher для выполнения соответствующих операторов SQL .как разобрать параметры запроса при использовании UriMatcher вместе с ConentProvider

код работает, но мне не нравится, как я извлечение параметров из Ури:

ЭТО неудовлетворительный:

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; 

ответ

2

Похоже, вы путаете параметры запроса в традиционном смысле этого слова, с рамками пути, как Symfony обрабатывать их.

Uri.getQueryParameter ищет строку запроса (content: // demo? Key = value). Чтобы получить параметры внутри пути, используйте Uri.getPathSegments().