contentprovider鐨勫涔狅紙杞彂锛
涓€銆丆ontentProvider绠€浠?/span>
聽 聽聽 聽 褰?span class="t_tag">搴旂敤缁ф壙ContentProvider绫伙紝骞堕噸鍐欒绫荤敤浜庢彁渚涙暟鎹拰瀛樺偍鏁版嵁鐨勬柟娉曪紝灏卞彲浠ュ悜鍏朵粬搴旂敤鍏变韩鍏舵暟鎹€傝櫧鐒朵娇鐢ㄥ叾浠栨柟娉曚篃鍙互瀵瑰鍏变韩鏁版嵁锛屼絾鏁版嵁璁块棶鏂瑰紡浼氬洜鏁版嵁瀛樺偍鐨勬柟寮忚€屼笉鍚岋紝濡傦細閲囩敤鏂囦欢鏂瑰紡瀵瑰鍏变韩鏁版嵁锛岄渶瑕佽繘琛屾枃浠舵搷浣滆鍐欐暟鎹紱閲囩敤sharedpreferences鍏变韩鏁版嵁锛岄渶瑕佷娇鐢╯haredpreferences API璇诲啓鏁版嵁銆傝€屼娇鐢–ontentProvider鍏变韩鏁版嵁鐨勫ソ澶勬槸缁熶竴浜嗘暟鎹闂柟寮忋€?/span>
浜屻€乁ri绫荤畝浠?/span>
聽 聽聽 聽 Uri浠h〃浜嗚鎿嶄綔鐨勬暟鎹紝Uri涓昏鍖呭惈浜嗕袱閮ㄥ垎淇℃伅锛?.闇€瑕佹搷浣滅殑ContentProvider 锛?.瀵笴ontentProvider涓殑浠€涔堟暟鎹繘琛屾搷浣滐紝涓€涓猆ri鐢变互涓嬪嚑閮ㄥ垎缁勬垚锛?/span>
聽 聽聽 聽 1.scheme锛欳ontentProvider锛堝唴瀹规彁渚涜€咃級鐨剆cheme宸茬粡鐢盇ndroid鎵€瑙勫畾涓猴細content://銆?/span>
聽 聽聽 聽 2.涓绘満鍚嶏紙鎴朅uthority锛夛細鐢ㄤ簬鍞竴鏍囪瘑杩欎釜ContentProvider锛屽閮ㄨ皟鐢ㄨ€呭彲浠ユ牴鎹繖涓爣璇嗘潵鎵惧埌瀹冦€?/span>
聽 聽聽 聽 3.璺緞锛坧ath锛夛細鍙互鐢ㄦ潵琛ㄧず鎴戜滑瑕佹搷浣滅殑鏁版嵁锛岃矾寰勭殑鏋勫缓搴旀牴鎹笟鍔¤€屽畾锛屽涓嬶細
鈥⒙?聽聽 聽聽 聽瑕佹搷浣渃ontact琛ㄤ腑id涓?0鐨勮褰曪紝鍙互鏋勫缓杩欐牱鐨勮矾寰?/contact/10
鈥⒙?聽聽 聽聽 聽瑕佹搷浣渃ontact琛ㄤ腑id涓?0鐨勮褰曠殑name瀛楁锛?contact/10/name
鈥⒙?聽聽 聽聽 聽瑕佹搷浣渃ontact琛ㄤ腑鐨勬墍鏈夎褰曪紝鍙互鏋勫缓杩欐牱鐨勮矾寰?/contact
瑕佹搷浣滅殑鏁版嵁涓嶄竴瀹氭潵鑷?span class="t_tag">鏁版嵁搴?/span>锛屼篃鍙互鏄枃浠剁瓑浠栧瓨鍌ㄦ柟寮忥紝濡備笅:
瑕佹搷浣渪ml鏂囦欢涓璫ontact鑺傜偣涓嬬殑name鑺傜偣锛屽彲浠ユ瀯寤鸿繖鏍风殑璺緞锛?contact/name
濡傛灉瑕佹妸涓€涓瓧绗︿覆杞崲鎴怳ri锛屽彲浠ヤ娇鐢║ri绫讳腑鐨刾arse()鏂规硶锛屽涓嬶細
Uri uri = Uri.parse("content://com.changcheng.provider.contactprovider/contact")
涓夈€乁riMatcher銆丆ontentUrist鍜孋ontentResolver绠€浠?/span>
聽 聽聽 聽 鍥犱负Uri浠h〃浜嗚鎿嶄綔鐨勬暟鎹紝鎵€浠ユ垜浠緢缁忓父闇€瑕佽В鏋怳ri锛屽苟浠嶶ri涓?span class="t_tag">鑾峰彇鏁版嵁銆侫ndroid绯荤粺鎻愪緵浜嗕袱涓敤浜庢搷浣淯ri鐨勫伐鍏风被锛屽垎鍒负UriMatcher 鍜孋ontentUris 銆傛帉鎻″畠浠殑浣跨敤锛屼細渚夸簬鎴戜滑鐨?span class="t_tag">寮€鍙?/span>宸ヤ綔銆?/span>
聽 聽聽 聽 UriMatcher锛氱敤浜庡尮閰峌ri锛屽畠鐨勭敤娉曞涓嬶細
聽 聽聽 聽 1.棣栧厛鎶婁綘闇€瑕佸尮閰峌ri璺緞鍏ㄩ儴缁欐敞鍐屼笂锛屽涓嬶細
聽 聽聽 聽 //甯搁噺UriMatcher.NO_MATCH琛ㄧず涓嶅尮閰嶄换浣曡矾寰勭殑杩斿洖鐮?-1)銆?/span>
聽 聽聽 聽 UriMatcher聽聽uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
聽 聽聽 聽 //濡傛灉match()鏂规硶鍖归厤content://com.changcheng.sqlite.provider.contactprovider/contact璺緞锛岃繑鍥炲尮閰嶇爜涓?
聽 聽聽 聽 uriMatcher.addURI(鈥渃om.changcheng.sqlite.provider.contactprovider鈥? 鈥渃ontact鈥? 1);//娣诲姞闇€瑕佸尮閰島ri锛屽鏋滃尮閰嶅氨浼氳繑鍥炲尮閰嶇爜
聽 聽聽 聽 //濡傛灉match()鏂规硶鍖归厤聽 聽content://com.changcheng.sqlite.provider.contactprovider/contact/230璺緞锛岃繑鍥炲尮閰嶇爜涓?
聽 聽聽 聽 uriMatcher.addURI(鈥渃om.changcheng.sqlite.provider.contactprovider鈥? 鈥渃ontact/#鈥? 2);//#鍙蜂负閫氶厤绗?/span>
聽 聽聽 聽
聽 聽聽 聽 2.娉ㄥ唽瀹岄渶瑕佸尮閰嶇殑Uri鍚庯紝灏卞彲浠ヤ娇鐢╱riMatcher.match(uri)鏂规硶瀵硅緭鍏ョ殑Uri杩涜鍖归厤锛屽鏋滃尮閰嶅氨杩斿洖鍖归厤鐮侊紝鍖归厤鐮佹槸璋冪敤addURI()鏂规硶浼犲叆鐨勭涓変釜鍙傛暟锛屽亣璁惧尮閰峜ontent://com.changcheng.sqlite.provider.contactprovider/contact璺緞锛岃繑鍥炵殑鍖归厤鐮佷负1銆?/span>
聽 聽聽 聽 ContentUris锛氱敤浜庤幏鍙朥ri璺緞鍚庨潰鐨処D閮ㄥ垎锛屽畠鏈変袱涓瘮杈冨疄鐢ㄧ殑鏂规硶锛?/span>
鈥⒙?聽聽 聽聽 聽withAppendedId(uri, id)鐢ㄤ簬涓鸿矾寰勫姞涓奍D閮ㄥ垎
鈥⒙?聽聽 聽聽 聽parseId(uri)鏂规硶鐢ㄤ簬浠庤矾寰勪腑鑾峰彇ID閮ㄥ垎
聽 聽聽 聽 ContentResolver锛氬綋澶栭儴搴旂敤闇€瑕佸ContentProvider涓殑鏁版嵁杩涜娣诲姞銆佸垹闄ゃ€佷慨鏀瑰拰鏌ヨ鎿嶄綔鏃讹紝鍙互浣跨敤ContentResolver 绫绘潵瀹屾垚锛岃鑾峰彇ContentResolver 瀵硅薄锛屽彲浠ヤ娇鐢ˋctivity鎻愪緵鐨刧etContentResolver()鏂规硶銆?ContentResolver浣跨敤insert銆乨elete銆乽pdate銆乹uery鏂规硶锛屾潵鎿嶄綔鏁版嵁銆?/span>
鍥涖€丆ontentProvider绀轰緥绋嬪簭
Manifest.xml涓殑浠g爜锛?/span>
聽
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<application android:icon= "@drawable/icon" android:label= "@string/app_name" > 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <activity android:name= ".TestWebviewDemo" android:label= "@string/app_name" > 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <intent-filter> 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <action android:name= "android.intent.action.MAIN" /> 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <category android:name= "android.intent.category.LAUNCHER" /> 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </intent-filter> 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <intent-filter> 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <data android:mimeType= "vnd.android.cursor.dir/vnd.ruixin.login" /> 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </intent-filter> 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <intent-filter> 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <data android:mimeType= "vnd.android.cursor.item/vnd.ruixin.login" /> 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </intent-filter> 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </activity> 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <provider android:name= "MyProvider" android:authorities= "com.ruixin.login" /> 聽聽聽聽聽聽聽聽 </application> |
闇€瑕佸湪<application></application>涓负provider杩涜娉ㄥ唽锛侊紒锛侊紒
棣栧厛瀹氫箟涓€涓暟鎹簱鐨勫伐鍏风被锛?/span>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class RuiXin { 聽
聽聽聽聽聽聽聽聽 public static final String DBNAME = "ruixinonlinedb" ; 聽聽聽聽聽聽聽聽 public static final String TNAME = "ruixinonline" ; 聽聽聽聽聽聽聽聽 public static final int VERSION = 3 ; 聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽 public static String TID = "tid" ; 聽聽聽聽聽聽聽聽 public static final String EMAIL = "email" ; 聽聽聽聽聽聽聽聽 public static final String USERNAME = "username" ; 聽聽聽聽聽聽聽聽 public static final String DATE = "date" ; 聽聽聽聽聽聽聽聽 public static final String SEX = "sex" ; 聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽 public static final String AUTOHORITY = "com.ruixin.login" ; 聽聽聽聽聽聽聽聽 public static final int ITEM = 1 ; 聽聽聽聽聽聽聽聽 public static final int ITEM_ID = 2 ; 聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽 public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.ruixin.login" ; 聽聽聽聽聽聽聽聽 public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.ruixin.login" ; 聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽 public static final Uri CONTENT_URI = Uri.parse( "content://" + AUTOHORITY + "/ruixinonline" ); } |
聽
-
鐒跺悗鍒涘缓涓€涓暟鎹簱锛?/span>1234567891011121314151617181920212223242526272829
public
class
DBlite
extends
SQLiteOpenHelper {
聽聽聽聽聽聽聽聽
public
DBlite(Context context) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
super
(context, RuiXin.DBNAME,
null
, RuiXin.VERSION);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
// TODO Auto-generated constructor stub
聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽
@Override
聽聽聽聽聽聽聽聽
public
void
onCreate(SQLiteDatabase db) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
// TODO Auto-generated method stub
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
db.execSQL(
"create table "
+RuiXin.TNAME+
"("
+
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
RuiXin.TID+
" integer primary key autoincrement not null,"
+
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
RuiXin.EMAIL+
" text not null,"
+
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
RuiXin.USERNAME+
" text not null,"
+
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
RuiXin.DATE+
" interger not null,"
+
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
RuiXin.SEX+
" text not null);"
);
聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽
@Override
聽聽聽聽聽聽聽聽
public
void
onUpgrade(SQLiteDatabase db,
int
oldVersion,
int
newVersion) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
// TODO Auto-generated method stub
聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽
public
void
add(String email,String username,String date,String sex){
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
SQLiteDatabase db = getWritableDatabase();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
ContentValues values =
new
ContentValues();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
values.put(RuiXin.EMAIL, email);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
values.put(RuiXin.USERNAME, username);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
values.put(RuiXin.DATE, date);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
values.put(RuiXin.SEX, sex);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
db.insert(RuiXin.TNAME,
""
,values);
聽聽聽聽聽聽聽聽
}
}
-
鎺ョ潃鍒涘缓涓€涓狹yprovider.java瀵规暟鎹簱鐨勬帴鍙h繘琛屽寘瑁咃細123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
public
class
MyProvider
extends
ContentProvider{
聽聽聽聽聽聽聽聽聽
DBlite dBlite;
聽聽聽聽聽聽聽聽
SQLiteDatabase db;
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽
private
static
final
UriMatcher sMatcher;
聽聽聽聽聽聽聽聽
static
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
sMatcher =
new
UriMatcher(UriMatcher.NO_MATCH);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
sMatcher.addURI(RuiXin.AUTOHORITY,RuiXin.TNAME, RuiXin.ITEM);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
sMatcher.addURI(RuiXin.AUTOHORITY, RuiXin.TNAME+
"/#"
, RuiXin.ITEM_ID);
聽聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽
@Override
聽聽聽聽聽聽聽聽
public
int
delete(Uri uri, String selection, String[] selectionArgs) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
// TODO Auto-generated method stub
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
db = dBlite.getWritableDatabase();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
int
count =
0
;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
switch
(sMatcher.match(uri)) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
case
RuiXin.ITEM:
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
count = db.delete(RuiXin.TNAME,selection, selectionArgs);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
break
;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
case
RuiXin.ITEM_ID:
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
String id = uri.getPathSegments().get(
1
);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
count = db.delete(RuiXin.TID, RuiXin.TID+
"="
+id+(!TextUtils.isEmpty(RuiXin.TID=
"?"
)?
"AND("
+selection+
')'
:
""
), selectionArgs);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
break
;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
default
:
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
throw
new
IllegalArgumentException(
"Unknown URI"
+uri);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
getContext().getContentResolver().notifyChange(uri,
null
);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
return
count;
聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽聽
@Override
聽聽聽聽聽聽聽聽
public
String getType(Uri uri) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
// TODO Auto-generated method stub
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
switch
(sMatcher.match(uri)) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
case
RuiXin.ITEM:
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
return
RuiXin.CONTENT_TYPE;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
case
RuiXin.ITEM_ID:
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
return
RuiXin.CONTENT_ITEM_TYPE;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
default
:
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
throw
new
IllegalArgumentException(
"Unknown URI"
+uri);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽聽
@Override
聽聽聽聽聽聽聽聽
public
Uri insert(Uri uri, ContentValues values) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
// TODO Auto-generated method stub
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
db = dBlite.getWritableDatabase();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
long
rowId;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
if
(sMatcher.match(uri)!=RuiXin.ITEM){
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
throw
new
IllegalArgumentException(
"Unknown URI"
+uri);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
rowId = db.insert(RuiXin.TNAME,RuiXin.TID,values);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
if
(rowId>
0
){
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
Uri noteUri=ContentUris.withAppendedId(RuiXin.CONTENT_URI, rowId);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
getContext().getContentResolver().notifyChange(noteUri,
null
);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
return
noteUri;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
throw
new
IllegalArgumentException(
"Unknown URI"
+uri);
聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽聽
@Override
聽聽聽聽聽聽聽聽
public
boolean
onCreate() {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
// TODO Auto-generated method stub
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
this
.dBlite =
new
DBlite(
this
.getContext());
//聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 db = dBlite.getWritableDatabase();
//聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return (db == null)?false:true;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
return
true
;
聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽聽
@Override
聽聽聽聽聽聽聽聽
public
Cursor query(Uri uri, String[] projection, String selection,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
String[] selectionArgs, String sortOrder) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
// TODO Auto-generated method stub
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
db = dBlite.getWritableDatabase();聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
Cursor c;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
Log.d(
"-------"
, String.valueOf(sMatcher.match(uri)));
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
switch
(sMatcher.match(uri)) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
case
RuiXin.ITEM:
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
c = db.query(RuiXin.TNAME, projection, selection, selectionArgs,
null
,
null
,
null
);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
break
;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
case
RuiXin.ITEM_ID:
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
String id = uri.getPathSegments().get(
1
);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
c = db.query(RuiXin.TNAME, projection, RuiXin.TID+
"="
+id+(!TextUtils.isEmpty(selection)?
"AND("
+selection+
')'
:
""
),selectionArgs,
null
,
null
, sortOrder);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
break
;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
default
:
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
Log.d(
"!!!!!!"
,
"Unknown URI"
+uri);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
throw
new
IllegalArgumentException(
"Unknown URI"
+uri);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
c.setNotificationUri(getContext().getContentResolver(), uri);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
return
c;
聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽
@Override
聽聽聽聽聽聽聽聽
public
int
update(Uri uri, ContentValues values, String selection,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
String[] selectionArgs) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
// TODO Auto-generated method stub
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
return
0
;
聽聽聽聽聽聽聽聽
}
}
鏈€鍚庡垱寤烘祴璇曠被锛?/span>123456789101112131415161718192021222324252627282930public
class
Test
extends
Activity {
聽聽聽聽
/** Called when the activity is first created. */
聽聽聽
private
DBlite dBlite1 =
new
DBlite(
this
);;
聽聽聽聽聽聽聽聽
private
ContentResolver contentResolver;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
public
void
onCreate(Bundle savedInstanceState) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
super
.onCreate(savedInstanceState);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
setContentView(R.layout.main);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
//鍏堝鏁版嵁搴撹繘琛屾坊鍔犳暟鎹?/code>
聽聽聽聽聽聽聽聽聽聽聽聽
dBlite1.add(email,username,date,sex);
聽聽聽聽聽聽聽聽聽聽聽聽
//閫氳繃contentResolver杩涜鏌ユ壘
聽聽聽聽聽聽聽聽聽聽聽聽聽
contentResolver = TestWebviewDemo.
this
.getContentResolver();
聽聽聽聽聽聽聽聽聽聽聽聽
Cursor cursor = contentResolver.query(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
RuiXin.CONTENT_URI,
new
String[] {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
RuiXin.EMAIL, RuiXin.USERNAME,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
RuiXin.DATE,RuiXin.SEX },
null
,
null
,
null
);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
while
(cursor.moveToNext()) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
Toast.makeText(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
TestWebviewDemo.
this
,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
cursor.getString(cursor.getColumnIndex(RuiXin.EMAIL))
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
+
" "
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
+ cursor.getString(cursor.getColumnIndex(RuiXin.USERNAME))
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
+
" "
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
+ cursor.getString(cursor.getColumnIndex(RuiXin.DATE))
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
+
" "
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
+ cursor.getString(cursor.getColumnIndex(RuiXin.SEX)),
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
Toast.LENGTH_SHORT).show();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
startManagingCursor(cursor);聽
//鏌ユ壘鍚庡叧闂父鏍?/code>
聽聽聽聽聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽
}
娉細涓婇潰鏄湪涓€涓▼搴忎腑杩涜鐨勬祴璇曪紝涔熷彲浠ュ啀鏂板缓涓€涓伐绋嬫潵妯℃嫙涓€涓柊鐨勭▼搴忥紝鐒跺悗灏嗕笂闈㈡煡璇㈢殑浠g爜鍔犲埌鏂扮殑绋嬪簭褰撲腑锛佽繖鏍峰氨妯℃嫙浜哻ontentprovider鐨勬暟鎹叡浜?span class="t_tag">鍔熻兘浜嗭紒
鏂板缓涓伐绋嬶細TestProvider
鍒涘缓涓€涓祴璇曠殑activity123456789101112131415161718192021222324252627public
class
Test
extends
Activity {
聽聽聽聽
/** Called when the activity is first created. */
聽聽聽聽聽聽聽聽
private
ContentResolver contentResolver;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
public
void
onCreate(Bundle savedInstanceState) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
super
.onCreate(savedInstanceState);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
setContentView(R.layout.main);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽
//閫氳繃contentResolver杩涜鏌ユ壘
聽聽聽聽聽聽聽聽聽聽聽聽聽聽
contentResolver = TestWebviewDemo.
this
.getContentResolver();聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽
Cursor cursor = contentResolver.query(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
RuiXin.CONTENT_URI,
new
String[] {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
RuiXin.EMAIL, RuiXin.USERNAME,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
RuiXin.DATE,RuiXin.SEX },
null
,
null
,
null
);
聽聽聽聽聽聽聽聽聽聽聽聽
while
(cursor.moveToNext()) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
Toast.makeText(TestWebviewDemo.
this
,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
cursor.getString(cursor.getColumnIndex(RuiXin.EMAIL))
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
+
" "
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
+ cursor.getString(cursor.getColumnIndex(RuiXin.USERNAME))
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
+
" "
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
+ cursor.getString(cursor.getColumnIndex(RuiXin.DATE))
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
+
" "
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
+ cursor.getString(cursor.getColumnIndex(RuiXin.SEX)),
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
Toast.LENGTH_SHORT).show();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
startManagingCursor(cursor);聽
//鏌ユ壘鍚庡叧闂父鏍?/code>
聽聽聽聽聽聽聽聽聽聽聽聽
}
聽聽聽聽聽聽聽聽
}
娉細鏂板缓鐨勭▼搴忎腑鐨刴anifest.xml涓笉闇€瑕佸provider杩涜娉ㄥ唽锛岀洿鎺ヨ繍琛屽氨琛岋紝鍚﹀垯浼氭姤閿欙紒