日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 面试题之ContentProvider使用+实例

發布時間:2023/12/31 Android 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 面试题之ContentProvider使用+实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 一般來說ContentProvider是單例模式,多個應用可通過ContentResolver調用ContentProvider的增刪改查操作數據,ContentResolver調用的數據操作會讓同一個ContentProvider處理。

四、創建ContentProvider

1、創建一個類讓其繼承ContentProvider,并重載6個函數

需要實現的主要方法是:

  • 「insert()」「delete()」「update()」「query()」:用于對數據集的增刪改查操作。

  • 「onCreate()」:一般用來初始化底層數據集和建立數據連接等工作

  • 「getType()」:用來返回指定Uri的MIME數據類型,

  • 若Uri是單條數據,則返回的MIME數據類型以vnd.Android.cursor.item開頭;

  • 若Uri是多條數據,則返回的MIME數據類型以vnd.android.cursor.dir/開頭。

數據訪問方法**「如insert(Uri,ContentValues)和update(Uri,ContentValues,Bundle)」** 可以同時從多個線程調用,并且必須是線程安全的。其他方法**「如onCreate()」** 僅從應用程序主線程調用,并且必須避免執行冗長的操作。請參閱其預期線程行為的方法描述。

2、聲明Uri規則,實現UriMatcher

咱先來看看UriMatcher是干嘛的,UriMatcher本質上是一個文本過濾器,有助于解析Uri,用在ContentProvider中幫助我們過濾,分辨出查詢者想要查詢哪個數據表。

UriMatcher的構造函數中,UriMatcher.NO_MATCH是Uri無匹配時的返回代碼,值為-1。addUri()方法用來添加新的匹配項,語法為:

public?void?addUri(String?authority,?String?path,?int?code)

  • authority表示匹配的授權者名稱;

  • path表示數據路徑;

  • code表示返回代碼。

下面咱搞個實例:

//這里的名稱必須與AndroidManifest.xml中android:authorities保持一致

public?static?final?String?AUTHORITY?=?“com.scc.userprovider”;

//數據路徑

public?static?final?String?PATH_USERS?=?“user”;

//訪問ContentProvider的URL

public?static?final?Uri?CONTENT_URI?=?Uri.parse(“content://”?+?AUTHORITY?+?“/”?+?PATH_USERS);

//返回代碼

public?static?final?int?USER_INFO?=?1;

//創建UriMatcher對象

private?static?UriMatcher?uriMatcher;

//創建靜態代碼塊

static?{

//實例化UriMatcher對象

uriMatcher?=?new?UriMatcher(UriMatcher.NO_MATCH);

//參數1:authority;參數2:路徑;參數3:自定義代碼

uriMatcher.addURI(UserInfoContent.AUTHORITY,?UserInfoContent.PATH_USERS,?USER_INFO);

}

3、注冊ContentProvider

在AndroidManifest.xml文件中的 application節點下使用標簽注冊。樣例:

<android:authorities=“com.scc.userprovider”

android:name=“.UserProvider”

android:exported=“true”/>

五、使用ContentProvider

1、通過insert()方法添加單條數據

ContentValues?cv?=?new?ContentValues();

cv.put(UserInfoContent._ID,?bean.get_id());

cv.put(UserInfoContent.USER_NAME,?bean.getName());

cv.put(UserInfoContent.USER_AGE,?bean.getAge());

cv.put(UserInfoContent.USER_UPDATE_TIME,?bean.getUpdate_time());

Uri?uri?=?getContentResolver().insert(UserInfoContent.CONTENT_URI,?cv);

Log.e(getClass().getName(),?“insert:”?+?uri);

  • 通過bulkInsert()方法添加多條數據

ContentValues[]?arrayValues?=?new?ContentValues[10];

//實例化每一個ContentValues…

int?count?=?getContentResolver().bulkInsert(UserInfoContent.CONTENT_URI,?arrayValues);

2、指定ID刪除單條數據

int?delete?=?getContentResolver().delete(UserInfoContent.CONTENT_URI,?“_id=12”,?null);

Log.e(getClass().getName(),?“delete(失敗返回-1):”?+?delete);

  • 通過selection語句刪除多條數據

String?selection?=?UserInfoContent._ID?+?“>12”;

int?result?=?getContentResolver().delete(UserInfoContent.CONTENT_URI,?selection,?null);

3、修改數據

UserInfoBean?bean?=?new?UserInfoBean(“蚩尤”,?32,?“12:00”);

ContentValues?cv?=?new?ContentValues();

cv.put(UserInfoContent.USER_NAME,?bean.getName());

cv.put(UserInfoContent.USER_AGE,?bean.getAge());

cv.put(UserInfoContent.USER_UPDATE_TIME,?bean.getUpdate_time());

getContentResolver().update(UserInfoContent.CONTENT_URI,?cv,?“_id=18”,?null);

4、查詢數據

Cursor?cursor?=?getContentResolver().query(UserInfoContent.CONTENT_URI,?null,?selection,?null,?null);

//循環取出游標指向的每條用戶記錄

while?(cursor.moveToNext())?{

UserInfoBean?user?=?new?UserInfoBean();

user.name?=?cursor.getString(cursor.getColumnIndex(UserInfoContent.USER_NAME));

user.age?=?cursor.getInt(cursor.getColumnIndex(UserInfoContent.USER_AGE));

總結

以上是生活随笔為你收集整理的Android 面试题之ContentProvider使用+实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。