4

SimpleCursorAdapter 클래스는 사용되지 않으므로주의해야합니다. 이제 새로운 로더 API를 사용해야합니다.하지만 실제로 그렇게하려고 시도했을 때 CursorLoader는 ContentProvider에서만 작동한다는 것을 알았습니다.콘텐츠 공급자를 공유하지 않는 앱이 있습니까?

내 질문은 콘텐츠 공급자가 정말로 필요한가요? 공식 가이드조차도 다음과 같이 말합니다 :

다른 응용 프로그램과 데이터를 공유하지 않으려는 경우 자체 공급자를 개발할 필요가 없습니다. 그러나 자신의 응용 프로그램에서 사용자 지정 검색 제안을 제공하려면 자체 공급자가 필요합니다. 복잡한 데이터 또는 파일을 응용 프로그램에서 다른 응용 프로그램으로 복사하여 붙여 넣으려면 자체 공급자가 필요합니다.

그리고 나는 이것에 대한 필요성을 전혀 느끼지 않으므로 불필요한 복잡성을 만듭니다. 그래서 .. 어떻게해야합니까? 내 자신의 CursorLoader를 해킹하여 (CursorLoader usage without ContentProvider) 내 데이터베이스에서만 작동합니다. 정직하게 말하면 정말 좋아하지 않거나, 그냥 그걸 가져 와서 공급자를 만드는 것에 부합해야합니까?

감사합니다.

+0

[** 블로그 게시물 **] (http://www.androiddesignpatterns.com/2012/07/loaders-and-loadermanager-background.html)는 왜 당신이'managedQuery'와' startManagingCursor' 메소드를 호출하십시오. 'SimpleCursorAdapter' 클래스는 더 이상 사용되지 않습니다 ('SimpleCursorAdapter'를 생성하는 생성자 중 하나는 더 이상 사용되지 않습니다). –

+0

그래, 미안해, 내 나쁜 생각. 답장을 보내 주셔서 감사합니다. – urSus

+0

가능한 [콘텐츠 공급자를 사용할 때] (http://stackoverflow.com/questions/4936712/when-to-use-a-content-provider) – Elvisjames

답변

4

Loader (또는 CommonsWareSQLiteCursorLoader)을 작성하여 SQLiteDatabase에 직접 문의 할 수 있습니다. 응용 프로그램이 로컬 데이터에 대한 간단한 액세스 만 필요로한다면 (다른 프로세스/응용 프로그램과 데이터를 공유하는 것과 달리) 실제로는 ContentProvider이 필요하지 않다는 점에서 설명서가 옳습니다.

즉, ContentProvider은 몇 가지 이점을 제공합니다. 예를 들어 SyncAdapter 또는 SearchManager 인 검색 인터페이스를 구현해야합니다. 나는 내 응용 프로그램에 이것을 통합하려고 노력하므로 항상 ContentProvider을 구현하고 있습니다. ContentResolver은 변경 사항이 발생할 때 기본 데이터 소스에 글로벌 알림을 제공하는 쉬운 방법을 제공합니다. 예를 들어 CursorLoaderCursorContentObserver을 등록하고 을 Uri에 전화하면 Cursor에 알림을받습니다. 대신 SQLiteDatabase에서 직접 데이터를로드하려는 경우이를 설정하려면 더 많은 작업이 필요합니다.

+0

사용자 정의 ContentProvider를 사용하면 join, having, group by 등과 같은 복잡한 쿼리를 실행할 수 있습니까? – RestInPeace

1

두 옵션 모두 다른 옵션과 같습니다. 그것은 선호의 문제입니다.

개인적으로 나는 성가신 다른 응용 프로그램과 아무 것도 공유하지 않을 응용 프로그램에 콘텐츠 제공 업체를 사용하지만 인터뷰에서 들었던 올바른 조언이 있다고 생각합니다. "포켓 또는 플립 보드와 같은 큰 시작 유형의 앱을 개발 한 개발자)" "처음에는 복잡해 지더라도 안드로이드 방식으로 코드를 작성해도 나중에 시간/노력을 절약 할 수 있기 때문에" 나는 조언을 얻는다. 권장 방법을 사용하면 지원되고, 버그가 수정되고 쉽게 확장 될 수 있다는 사실에 초점을 맞 춥니 다.

+0

그것은 "환경 설정의 문제"가 아닙니다 ... 각 방법마다 기복이 있습니다.'ContentProvider'는 (실제로는 실제 데이터 소스를 감싸는 래퍼 일 뿐이므로) 꽤 많이 작동 할 것입니다. 그러나 실제로 구현하지 않은 경우에는 구현하면됩니다. –

관련 문제