2016-11-04 8 views
0

Реализация Content Provider со сложными запросами требует сложных шаблонов uri, и я не понимаю, как я могу справиться с этим.Как обрабатывать продвинутые шаблоны Uri в Android

  1. Могу ли я использовать регулярное выражение в своих шаблонах? пример: /user/:[a-zA-Z]/timeline/, если пользователь должен содержать только буквы.
  2. Какие символы указывают UriMather, что пример параметров: /user/:userId/timeline/year/:yearNumber, я бы получил userId и yearNumber в качестве параметров, поэтому как мне получить значения? следует ли использовать getPathSegments() и получить параметры вручную?
  3. или если я использовал /user/#/timeline/year/# как я извлечь # значения

ответ

0

При использовании формата /user/#/timeline/year/# вы можете позвонить:

uri.getPathSegments().get(1); // To get the first # 
uri.getPathSegments().get(4); // to get the second # 
// 0 -> user, 1 -> first #, 2 -> timeline, 3 -> year, 4 -> second # 

Таким образом, в поставщика контента вы бы что-то вроде этого:

private static final int USER_TIMELINE_YEAR = 1; 
// ... 

private static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); 
static 
{ 
    uriMatcher.addURI(PROVIDER_NAME, "user/#/timeline/year/#", USER_TIMELINE_YEAR); 
} 

// Usually a ContentProvider method like query, insert, delete and update 
public void someMethod(Uri uri) { 
    if(uriMatcher.match(uri) == USER_TIMELINE_YEAR) { 
     String userId = uri.getPathSegments().get(1); 
     String timelineYear = uri.getPathSegments().get(4); 
    } 
} 

Проверить https://developer.android.com/guide/topics/providers/content-provider-creating.html и https://developer.android.com/reference/android/content/UriMatcher.html

+0

ok спасибо, что вы знаете, о первом вопросе о регулярном выражении? – Lior

+0

Нет, вы не можете использовать регулярные выражения. Вы можете использовать # для любого числа и * для любой строки. –