2016-12-01 6 views
0

나는이 주제에 대해 많은 책을 읽었지만이 기호 들인 *, #이 무엇을 의미하는지/찾을 수는 없다.문제 이해 UriMatcher 구문

SqLite의 ?처럼 뭔가의 자리 표시 자로 사용되는 경우 대체 대상은 무엇입니까? 또한, 당신이하는 일이 모두 우리와 일치한다면,이 비밀 표기법의 목적은 무엇입니까?

목록이나 객체 또는 다른 것을 반환하려는 경우 왜 상수 이름을 읽을 수있는 이름으로 지정하고 임의의 값을 지정하고 거기에서 계속 진행하지 않겠습니까?

예.

sURIMatcher.addURI("contacts", "people", PEOPLE); 
sURIMatcher.addURI("contacts", "people_id", PEOPLE_ID); 
sURIMatcher.addURI("contacts", "people_phones", PEOPLE_PHONES); 

답변

1

sURIMatcher.addURI("contacts", "people", PEOPLE); 
sURIMatcher.addURI("contacts", "people/#", PEOPLE_ID); 
sURIMatcher.addURI("contacts", "people/#/phones", PEOPLE_PHONES); 

나는 특정 ID로 내 데이터베이스의 항목을 삭제 예를 들어 사용합니다.

Uri deleteUri = Uri.parse(NoteProvider.CONTENT_URI + "/" + id); 
context.getContentResolver().delete(deleteUri, null, null); 

// URI Matcher 
sURIMatcher.addURI(AUTHORITY, NOTE_BASE_PATH + "/#", NOTE_WITH_ID); 

// delete 
String id = uri.getLastPathSegment(); 
rowsDeleted = db.delete(NoteEntry.TABLE_NAME, NoteEntry._ID + "=" + id, null); 
  • *는 : 어떤 길이의 유효한 문자열을 일치시킵니다.
  • # : 임의의 길이의 숫자 문자열을 일치시킵니다.

URI은 리소스 경로이며 ContentProvider으로 액세스하는 리소스입니다. 그래서 나는이 경우에 URI이 가장 적합하다고 생각합니다.

콘텐츠 URI는 공급자의 데이터를 식별하는 URI입니다. 내용 URI에는 전체 공급자 (해당 기관)의 기호 이름 과 테이블 또는 파일 (경로)을 가리키는 이름이 포함됩니다. 선택적 id 부분은 테이블의 개별 행을 가리 킵니다.