안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요. 항상 답변에 감사드려요 ^^
앱을 통해 만든 DB에 ContentProvider를 이용해 URI 생성하는 방법에 대해서 질문드립니다.
비슷한 내용과 설명이 구글아저씨를 통하면 굉장히 많지만 도통 이해가 가지 않는 부분이 있어서 질문을 드립니다.
일단 제가 하려는 것은 앱을 통해 만든 DB에 ContentObserver를 다는 것입니다. 그런데 ContentOberver를 달려고 하니,
보통 아래와 같이 옵져버를 붙이는데 제가 만든 DB에는 URI가 없어서 찾아보니 ContentProvider를 이용해서 URI를 만들어야 한다고 들었습니다.
getContentResolver().registerContentObserver( URI ,true, 제작한 Observer);
그런데 검색된 자료의 대부분은 (구글의 NOTE 예제 등) ContentProvider에서 DB OpenHelper를 연결하고 URI와 ContentResolver를 통해서 query나 select 등을 하더라구요.
그런 예제들에서 지정한 URI와 이 URI가 어느 테이블을 바라보고 있다는 걸 지정(선언?) 해 주는 부분이 어딘지를 모르겠습니다.
URI 구조를 들여다봐도 잘 이해가 안되더라구요 ㅜ.ㅜ
매니페스트에
<provider android:name="NotePadProvider" android:authorities="com.google.provider.NotePad" />
라고 되어있고
URI는
public static final String AUTHORITY = "com.google.provider.NotePad";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/notes");
라고 되어있는데 이 CONTENT_URI 가 notes 라는 테이블을 바라보고 있는 것 같은데.
1. URI가 해당 테이블을 바라보고 있다고 선언하는 부분이 어디인가요? (위 과정으로 그냥 끝나는 건가요?)
2. 또한 AUTHORITY 는 매니페스트에 위와 같이 정해주고 URI 지정시 똑같이 쓰기만 하면 되나요? 특별히 db의 path와 같게
맞춰야한다던지 하는 필요성은 없나요?
3. 앱에서 만든 db에 ContentProvider를 통해 uri를 만들어주고 ContentObserver를 연결한다는 것이 적합한 방법인가요?
어제 하루동안 ContentProvider만 붙들고 있었는데도 잘 모르겠으니 손발이 오그라드네요... 후딱 일은 해야하는데 흑흑
긴 글을 읽어주셔서 감사드립니다. 모두 행복한 하루 되세요 ~
앱을 통해 만든 DB에 ContentProvider를 이용해 URI 생성하는 방법에 대해서 질문드립니다.
비슷한 내용과 설명이 구글아저씨를 통하면 굉장히 많지만 도통 이해가 가지 않는 부분이 있어서 질문을 드립니다.
일단 제가 하려는 것은 앱을 통해 만든 DB에 ContentObserver를 다는 것입니다. 그런데 ContentOberver를 달려고 하니,
보통 아래와 같이 옵져버를 붙이는데 제가 만든 DB에는 URI가 없어서 찾아보니 ContentProvider를 이용해서 URI를 만들어야 한다고 들었습니다.
getContentResolver().registerContentObserver( URI ,true, 제작한 Observer);
그런데 검색된 자료의 대부분은 (구글의 NOTE 예제 등) ContentProvider에서 DB OpenHelper를 연결하고 URI와 ContentResolver를 통해서 query나 select 등을 하더라구요.
그런 예제들에서 지정한 URI와 이 URI가 어느 테이블을 바라보고 있다는 걸 지정(선언?) 해 주는 부분이 어딘지를 모르겠습니다.
URI 구조를 들여다봐도 잘 이해가 안되더라구요 ㅜ.ㅜ
매니페스트에
<provider android:name="NotePadProvider" android:authorities="com.google.provider.NotePad" />
라고 되어있고
URI는
public static final String AUTHORITY = "com.google.provider.NotePad";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/notes");
라고 되어있는데 이 CONTENT_URI 가 notes 라는 테이블을 바라보고 있는 것 같은데.
1. URI가 해당 테이블을 바라보고 있다고 선언하는 부분이 어디인가요? (위 과정으로 그냥 끝나는 건가요?)
2. 또한 AUTHORITY 는 매니페스트에 위와 같이 정해주고 URI 지정시 똑같이 쓰기만 하면 되나요? 특별히 db의 path와 같게
맞춰야한다던지 하는 필요성은 없나요?
3. 앱에서 만든 db에 ContentProvider를 통해 uri를 만들어주고 ContentObserver를 연결한다는 것이 적합한 방법인가요?
어제 하루동안 ContentProvider만 붙들고 있었는데도 잘 모르겠으니 손발이 오그라드네요... 후딱 일은 해야하는데 흑흑
긴 글을 읽어주셔서 감사드립니다. 모두 행복한 하루 되세요 ~
자답입니다.
결국은 하려던 것은 어떻게 머리를 써봐도 안되더라구요. 그냥 같은 기능을 BroadcastReceiver를 이용해서 구현했습니다.
1, 2 번에 관해서 확실하진 않지만 uri와 table 연동하는 부분은 insert나 query 같은 메소드에 있는
getContext().getContentResolver().notifyChange(reUri, mObserver);
부분인것 같습니다. 여기서 ContentObserver로 바로 연결도 가능한 것 같더라구요.
다만, 이후 진행부분에서 ContentObserver의 동작을 제대로 구현하지 못해서 확인은 못했구요.
혹시나 아시는 분은 나중에라도 답변을 달아주시면 큰 도움이 될 것 같습니다.
감사합니다.