contentprovider鐨勫涔狅紙杞彂锛

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");
}

  1. 鐒跺悗鍒涘缓涓€涓暟鎹簱锛?/span>
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    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);
    聽聽聽聽聽聽聽聽}
    }
  1. 鎺ョ潃鍒涘缓涓€涓狹yprovider.java瀵规暟鎹簱鐨勬帴鍙h繘琛屽寘瑁咃細
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    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>
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    public 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
    鍒涘缓涓€涓祴璇曠殑activity
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public 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>
    聽聽聽聽聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽}
    杩愯姝ょ▼搴忓氨鑳藉疄鐜板叡浜暟鎹煡璇簡锛?/span>

    娉細鏂板缓鐨勭▼搴忎腑鐨刴anifest.xml涓笉闇€瑕佸provider杩涜娉ㄥ唽锛岀洿鎺ヨ繍琛屽氨琛岋紝鍚﹀垯浼氭姤閿欙紒