2010-07-24 2 views
14

GPS에서 얻은 수정 사항을 SQLite 데이터베이스에 저장하는 데 사용하는 사용자 정의 ContentProvider가 있습니다. 이 클래스는 ContentProvider 메서드 (delete, insert, query ...)를 재정의하지만 마지막 수정을 쿼리하는 메서드도 포함되어 있습니다.Android : ContentProvider에서 사용자 정의 메서드 호출

public class FixesContentProvider extends ContentProvider { 
    @Override 
    public int delete(...) { ... } 
    ... 
    @Override 
    public Cursor query(...) { ... } 

    public Cursor getLastFix(Uri uri) { ... } 
} 

getContentResolver()를 호출하여 다른 서비스 나 활동 데이터를 조회하는 것이 매우 쉽다.

ContentResolver cR = getContentResolver(); 
Cursor fixes = cR.query(CONTENT_URI, ...); 

그러나 맞춤 방식 (FixesContentProvider#getLastFix)을 호출 할 수 없습니다. ContentProvider에 정의 된 사용자 정의 메서드를 어떻게 호출 할 수 있습니까?

아마도 ContentProviders/ContentResolvers가이 경우 어떻게 작동하는지 이해할 수 없지만 공식적으로 Android documentation provided by Google은 이러한 점에서 분명하지 않습니다.

답변

13

는하지만 내 사용자 지정 방법 (FixesContentProvider#getLastFix)를 호출 할 수 없습니다입니다.

그건 사실입니다. 하지만이 경우에는 querygetLastFix 메서드 모두 Cursor 객체를 반환한다는 사실을 활용할 수 있습니다. 그래서 내가하는 일은 query에 전달하는 URI에 값을 추가하고 실제로 수행 할 내용을 결정합니다 (query 또는 getLastFix). 예를 들어 :

public Cursor query(Uri uri,...) { 
    if (uri says it has to return the last fix) 
     return getLastFix(uri); 
    // otherwise, do normal operations... 
    return cursor; 
} 

사실, query 방법은 결과를 반환한다고 가정 Uri이 부여됩니다. 따라서 마지막 수정 프로그램을 검색해야하는 경우 마지막 수정을 원할 URI를 지정해야합니다.

+0

내가 그랬다. 저는 UriMatcher.addUri를 사용하여 "content : // xxx/fixes"및 "content : // xxx/fixes/last"를 두 개의 다른 코드에 일치 시키며 스위치 (myUriMatcher.match (uri)) {사례 CODE_1 : xxx; case CODE_2 : yyy; }. 고맙습니다. –

관련 문제