ContentObserver 의 생성자에는 Hanlder 매개 변수가 필요합니다. ContentObserver 는 내부 클래스를 사용하여 Runnable 에게 데이터베이스 내용을 변경하는 runnable 인터페이스를 구현하기 때문입니다. 너는 hanlder 를 사용하여 메시지를 게시해야 한다. ContentObserver 를 등록하려면 get Content Resolver () 를 사용합니다. 콘텐츠 서버 (URI, NotifyForDescendents, 관찰자) 를 등록합니다.
위의 세 가지 매개 변수인 Uri-uri type 은 모니터할 데이터베이스의 uri 입니다.
Notifyfordescendants-boolean? True 는 이 URI 와 관련된 모든 uri 를 수신합니다. False 이면 수신할 직접적이고 특별한 uri 입니다. 보통 true 로 설정됩니다.
관찰자-컨텐트 관찰자? 이것이 바로 당신이 필요로 하는 내용 관찰자입니다.
ContentObserver 객체를 초기화하고 onChange(boolean) 를 다시 로드하여 변경된 용도에 맞게 데이터베이스 사용을 조작합니다.
작은 데모를 썼는데 참고할 수 있어요. 이 모니터링 방법은 contentprovider 에 uri 가 있으므로 contentprovider 여야 합니다. Uri 없이는 간단한 SQLite 데이터베이스를 사용할 수 없습니다.
다음 데모에서는 한 활동 a 의 버튼을 클릭하여 다른 활동 b 로 이동하고 b 의 버튼을 클릭하여 데이터베이스에 데이터를 추가한 다음 b 를 닫고 a ... 로 돌아가는 버튼 텍스트가 자동으로 변경되어 데이터베이스의 문자열로 설정됩니다. [코드]
소포? Ty.com.lto;;
02?
03 가져오기? Android.app.activity;
04 수입? Android.content.intent;
05 수입? Android.database.contentobserver;
06 수입? 안드로이드.os.bundle;
07 수입? 안드로이드.os.handler;
08 수입? Android.view.view;
09 수입? Android.widget.button;
10?
1 1 공용? 반? ListenDataTest? 확장? 활동 {
12private? 버튼? 테스트 BTN
13?
14 @ 덮어쓰기
15 보호? 무효화? OnCreate (번들? SavedInstanceState)? {
16super.oncreate (savedinstancestate);
17 setcontentview (R. layout.listen _ data _ test);
18? GetContentResolver () 를 사용합니다. Registercontentobserver (datachangeprovider). 컨텐츠 _URI
19 참,? Cob);
20?
21테스트 BTN? =? (button) findviewbyid (r.id.test _ BTN);
22testBtn.setOnClickListener (신규? 살펴보다. OnClickListener ()? {
23?
24 공공? 무효화? OnClick (보기? 5)? {
25 의도? 네? =? NewIntent(ListenDataTest.this, datachangetest.class);
26 start activity (in);
27?
28}
29});
30?
3 1}
32?
33 개인? ContentObserver? 코브? =? 새 것? ContentObserver (신규? 처리기 ()? {
34?
35 @ 초월
36 공공? 부울? DeliverSelfNotifications ()? {
37 반환? Super.deliverselnotifications ();
38}
39?
40 @ 초과
4 1 공용? 무효화? OnChange (부울? 자기 변화)? {
42super.onChange (자기 변화);
43? Testbtn.settext (datautils.getchangename (getapplicationcontext ());
44}
45
46? }
47?
48 @ 초월
49 보호? 무효화? OnDestroy ()? {
50super.ondestroy ();
5 1getContentResolver () 입니다. Unregistercontentobserver (cob);
52}
53
54
55}
[코딩] 0 1 패키지? Ty.com.lto;;
02?
03 가져오기? Android.app.activity;
04 수입? Android.content.contentvalues;
05 수입? Android.content.intent;
06 수입? Android.database.contentobservable;
07 수입? Android.database.contentobserver;
08 수입? 안드로이드.os.bundle;
09 수입? 안드로이드.os.handler;
10 가져오기? Android.view.view;
1 1 수입? Android.widget.button;
12?
13public? 반? DataChangeTest? 확장? 활동 {
14? 개인? 버튼? 데이터 BTN
15? DataSqlite? MDataSqlite
16? @ 덮어쓰기
17? 보호받고 있습니까? 무효화? OnCreate (번들? SavedInstanceState)? {
18 super.oncreate (savedinstancestate);
19 setcontentview (R. layout.data _ change _ test);
20 데이터 BTN? =? (button) findviewbyid (r.id.data _ test _ BTN);
2 1mDataSqlite? =? 새 것? 데이터 스프라이트 (이것);
22dataBtn.setOnClickListener (신규? 살펴보다. OnClickListener ()? {
23?
24 공공? 무효화? OnClick (보기? 5)? {
25 컨텐츠 값? 사기? =? 새 것? Contentvalues ();
26con.put ("이름", "데이터 변경됨");
27getContentResolver () 를 사용합니다. Insert(DataChangeProvider). 컨텐츠 _URI,? Con);
28finish ();
29}
30});
3 1? }
32}
[코드] 보기? 소스 인쇄?
00 1 패키지? Ty.com.lto;;
002
003
004 수입? Android.content.contentprovider;
005 수입? Android.content.contenturis;
006 수입? Android.content.contentvalues;
007 수입? Android.content.context;
008 수입? Android.content.urimatcher;
009 수입? 안드로이드. 데이터베이스. 커서
0 10 가져오기? Android.database.sqlexception;
0 1 1 수입? Android.database.sqlite.sqlitedatabase;
0 12 가져오기? Android.database.sqlite.sqliteopenhelper;
0 13 가져오기? Android.database.sqlite.sqlitequerybuilder;
0 14 가져오기? Android.database.sqlite.sqlitedatabase.cursorfactory;
0 15 가져오기? Android.net.uri;
0 16 가져오기? Android.text.textutils;
0 17
0 18 공용? 반? DataChangeProvider? 확장? ContentProvider{
0 19 개인? SQLiteOpenHelper? MOpenHelper
020 개인? 정전기? 결승전? Int? 경보? =? 1;
02 1 개인? 정전기? 결승전? Int? 경고 _ID? =? 2;
022 개인? 정전기? 결승전? UriMatcher? 외과의사? =? 새 것? UriMatcher(UriMatcher) 입니다. No _ match);
023public? 정전기? 결승전? 유리? 컨텐츠 _URI? =? Uri.parse ("content://ty.com.lto/test");
024
025 정전기? {
026surlmatcher.adduri ("ty.com.lto",? "테스트",? 경보);
027surlmatcher.adduri ("ty.com.lto", "test/#",? Alarms _ id);
028}
029?
030 개인? 정전기? 반? DatabaseHelper? 확장? SQLiteOpenHelper{
03 1? 개인? 정전기? 결승전? 문자열? 테스트 _ 데이터베이스? =? "테스트.db";
032? 개인? 정전기? 결승전? Int? 버전? =? 1;
033
034? 공공? DatabaseHelper (컨텍스트? 컨텍스트)? {
035? 수퍼 (컨텍스트,? 테스트 _ 데이터베이스,? 널,? 버전);
036? //? 토도? 자동 생성? 건설사? 담배 꽁초
037? }
038?
039
040? @ 덮어쓰기
04 1? 공공? 무효화? OnCreate(SQLiteDatabase? Db)? {
042? 문자열? Sql? =? "창조? 표? " +"테스트"+"? ("? +
043? "_id? 정수? 초급? 키, "? +
044? \ "이름? 문자? " +
045 ");" 을 눌러 섹션을 인쇄할 수도 있습니다
046? Db.exec SQL (SQL);
047? }
048
049? @ 덮어쓰기
050? 공공? 무효화? OnUpgrade(SQLiteDatabase? Db,? Int? 이전 버전,? Int? NewVersion)? {
05 1? 문자열? Sql? =? "아래로? 책상? 만약? 존재합니까? " +테스트 _ 데이터베이스
052? Db.exec SQL (SQL);
053? Oncreate (db);
054? }
055
056}
057?
058 공공? DataChangeProvider ()? {
059}
060?
06 1 @ 덮어쓰기
062public? Int? 삭제 (Uri? 웹사이트 주소,? 문자열? 어디? String[]? WhereArgs)? {
063 SQLite 데이터베이스? Db? =? Mopenhelper.getwritabledatabase ();
064int? 셀 수 있습니다.
065 용? RowId? =? 0;
066 스위치? (sURLMatcher.match(url))? {
067 사건? 경고:
068 카운트? =? Db.delete ("테스트", 어디? Where args);
069break
070 건? 경고 _ID:
071문자열? 세그먼트? =? Url.getPathSegments () 를 사용합니다. Get (1);
072