2016-11-04 2 views
0

복잡한 쿼리를 사용하여 컨텐트 프로 바이더를 구현하려면 복잡한 URI 패턴이 필요하며 어떻게 처리해야하는지 이해할 수 없습니다.Android에서 고급 Uri 패턴을 처리하는 방법

  1. 내 패턴에 정규 표현식을 사용할 수 있습니까? 예 : /user/:[a-zA-Z]/timeline/ 사용자가 글자 만 포함해야하는 경우.
  2. UriMather에 매개 변수의 예를 알려주는 기호는 다음과 같습니다. /user/:userId/timeline/year/:yearNumber, 나는 userId 및 yearNumber를 매개 변수로 사용하므로 값을 가져 오는 방법은 무엇입니까? getPathSegments()을 사용해야하고 매개 변수를 수동으로 가져와야합니까?
  3. 또는 내가 /user/#/timeline/year/#를 사용한 경우 어떻게 # 당신이 호출 할 수있는 형식 /user/#/timeline/year/#을 사용하여

답변

0

값 추출 할 : 콘텐츠 제공 업체에 따라서

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 # 

당신이 이런 식으로 뭔가를 할 것이다 :

확인 https://developer.android.com/guide/topics/providers/content-provider-creating.html
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/reference/android/content/UriMatcher.html

+0

ok 감사합니다. 정규 표현식에 대한 첫 번째 질문은 무엇입니까? – Lior

+0

아니요, 정규식을 사용할 수 없습니다. 임의의 숫자에는 #을, 모든 문자열에는 *를 사용할 수 있습니다. –