安卓入門---四大元件--ContentProvider
ContentProvider的功能和意義:
為了在應用程式之間交換資料,Android提供ContentProvider,ContentProvider是不同應用程式之間進行資料交換的標準API。當一個應用程式需要把自己的資料暴露給其他應用程式使用時,該應用程式可以通過提供ContentProvider來實現;而其他應用程式需要使用這些資料時,可以通過ContentResolver來操作ContentProvider暴露的資料。
一旦某個應用程式通過ContentProvider暴露了自己的資料操作介面,那麼不管該應用程式是否啟動,其他應用程式都可以通過該介面來操作被暴露的內部資料,包括增加資料、刪除資料、修改資料、查詢資料等。
雖然大部分使用ContentProvider操作的資料都來自於資料庫,但是也可以來自於檔案、SharedPreferences、XML或網路等其他儲存方式。
總結來說就是跨程式之間的資料共享
ContentResolver資料訪問/操作
外界的程式通過ContentResolver介面可以訪問ContentProvider提供的資料,可以通過Context使用getContentResolver()獲得。
資料操作:CRUD–insert(),update(),delete(),query()
Uri引數: Uri是ContentResolver和ContentProvider進行資料交換的標識。兩部分組成–許可權+路徑
具體使用過程如下:得到uri字串後轉化為Uri物件
使用Uri.parse()方法,把字串轉化成Uri物件。
如果查詢:
Cursor cursor=getContentResolver().query{uri,…(其他引數)}
引數 | 說明 |
---|---|
Uri uri | 指定某個程式下某張表 |
String[] projection | 相當於要查詢的欄位名 |
String where | 查詢的條件 |
String[] whereArgs | 查詢條件的佔位符插入的引數 |
String sortOrder | 排序方式 |
讀取系統提供的內容:
系統預設有內容提供器,我們正確的uri就能讀取系統。下面讀取系統聯絡人顯示出來:
讀取
public class MainActivity extends AppCompatActivity {
private ListView listView;
private ArrayAdapter<String> adapter;
private List<String> contentlist = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listview);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, contentlist);
listView.setAdapter(adapter);
readConteats();
}
private void readConteats() {
Cursor cursor = null;
try {
cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext()) {
String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
contentlist.add(displayName + "\n" + number);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
}
}
新增許可權:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
自定義內容提供器並使用:
自定義內容提供器
自定義MyProvider繼承ContentProvider並實現他的6個方法。
看下這6個方法:
根據uri確定MIME的型別
@Override
public String getType(Uri uri) {
return null;
}
刪除方法
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}
更新方法
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
return 0;
}
插入方法,uri確定插入的表
@Override
public Uri insert(Uri uri, ContentValues values) {
return null;
}
查詢方法,uri引數確定那張表
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
return null;
}
初始化方法onCreate,返回True表示成功
@Override
public boolean onCreate() {
return false;
}
uri的寫法:
類似content://com.example.app.provider/table1
或者再加一個id content://com.example.app.provider/table1/1
content+程式包名+表名+id
關於id的指定,有兩種萬用字元*和#
*–人員長度字串
#任意長度數字
匹配任意表:
content://com.example.app.provider/*
匹配表的任意一行:
content://com.example.app.provider/table1/#
UriMatcher類的使用:
因為Uri代表了要操作的資料,所以我們很經常需要解析Uri,並從Uri中獲取資料。Android系統提供了兩個用於操作Uri的工具類,分別為UriMatcher 和ContentUris 。掌握它們的使用,會便於我們的開發工作。UriMatcher類用於匹配Uri,具體使用如下:
1.例項化UriMatcher物件。
//常量UriMatcher.NO_MATCH表示不匹配任何路徑的返回碼
UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
2.使用addURL新增uri,接收三個引數
//如果match()方法匹配content://cn.xxt.provider.personprovider/person路徑,返回匹配碼為1
sMatcher.addURI(“cn.xxt.provider.personprovider”, “person”, 1);//新增需要匹配uri,如果匹配就會返回匹配碼
//如果match()方法匹配content://cn.xxt.provider.personprovider/person/230路徑,返回匹配碼為2
sMatcher.addURI(“cn.xxt.provider.personprovider”, “person/#”, 2);//#號為萬用字元
3.呼叫match()方法,傳入uri物件,返回uri的自定義物件,判斷呼叫方呼叫的表。
//使用uri.parse方法使字元型變數變成uri物件
switch (sMatcher.match(Uri.parse("content://cn.xxt.provider.personprovider/person/10"))) {
case 1
break;
case 2
break;
default://不匹配
break;
}
相關推薦
安卓入門---四大元件--ContentProvider
ContentProvider的功能和意義: 為了在應用程式之間交換資料,Android提供ContentProvider,ContentProvider是不同應用程式之間進行資料交換的標準API。當一個應用程式需要把自己的資料暴露給其他應用程式使用時,
安卓入門--四大元件--Service基本用法
Service是什麼 Service(服務)是一個沒有使用者介面的在後臺執行執行耗時操作的應用元件。其他應用元件能夠啟動Service,並且當用戶切換到另外的應用場景,Service將持續在後臺執行。另外,一個元件能夠繫結到一個service與之互動(I
安卓入門之ListView控制元件實現
ListView介紹 安卓中ListView是一種自定義清單表,我們經常在淘寶上搜索寶貝後所出現的上下可滑動的商品列表、QQ/微信訊息列表等都是ListView控制元件來做的,下面紅框框中就是ListView。 有沒有一種豁然開朗的感覺(瘋狂暗示)。。。所以掌握ListView這種
安卓入門--Spinner控制元件與二級聯動詳解
SPinner 父類:AbsSpinner–AdapterView 定義:下拉選單控制元件 常用方法: android:spinnerMode: 1. dialog---對話方塊模式 2. dropdown--下拉模式 dropdown效果
android的常用控制元件總結【安卓入門五】
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 RadioButton單選
安卓入門到進階推薦書籍整理pdf附網盤連結已拿阿里豆瓣offer(珍藏)
轉載自某大佬部落格:https://pymlovelyq.github.io/2018/09/04/An/ 前言:技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好
安卓常用控制元件RecyclerView+HorizontalScrollView實現item側滑效果 安卓常用控制元件RecyclerView+HorizontalScrollView實現item側滑效果
原 安卓常用控制元件RecyclerView+HorizontalScrollView實現item側滑效果 2017年10月28日 12:23:14 低-調
Android 開發:(三)安卓常用控制元件以及仿《微門戶》登入介面實現
一、常用控制元件: 1、文字類控制元件 TextView 負責展示文字,非編輯 EditText 可編輯文字控制元件 2、按鈕類控制元件 Button 按鈕 ImageButton 圖片按鈕 RadioButton與RadioGroup 單
安卓入門之Button事件響應
Android環境 介紹 Android Studio 2.3.3 、Java之後的安卓入門部落格都是在這個環境下進行的。 Button原理簡單分析 眾所周知,button的作用就是響應事件,當but
安卓入門之Activity與Dialog
Activity介紹 安卓中Activity代表頁的意思,也就是☞我們手機上當前的整個介面顯示,點選按鈕等操作可以跳轉到另外一個Activity中。 Activity主要的幾個函式如下: onCreate( ) :
Android四大元件-ContentProvider
概念: 內容提供器,Android 四大元件之一。 作用: 可以操作非本應用程式的資料,實現跨程序資料共享。 優點: 可以在保證資料的安全性的情況下實現資料跨程序共享。因為contentprovider規範了統一的資料訪問介面。 對底層資料儲存方式抽象,即如果您將底層
安卓常用控制元件——按鈕、影象檢視與影象按鈕
目錄 一、按鈕(Button): 二、圖象檢視(Image View) 2、在XML中的屬性: 3、ImageView的background和src屬性有什麼區別: 三、影象按鈕(ImageButton)
安卓入門系列-01開發工具Android Studio的安裝
谷歌在早幾年就關閉了第三方支援,現在官方主推的開發工具就是Android Studio,所以我的安卓開發也是從as開始的。 1.下載IDE 像安卓這類開發,它不同於其他的程式設計開發,一個好的工具是必須的。Android Studio經過幾年的逐步發展,如今已經是比較好用
安卓設定控制元件的陰影效果:圖層效果LayerList
圖層列表 LayerDrawable 是管理其他可繪製物件陣列的可繪製物件。列表中的每個可繪製物件按照列表的順序繪製,列表中的最後一個可繪製物件繪於頂部。每個可繪製物件由單一 layer-list 元素內的 item 元素表示。 layer-list 對應的 J
安卓入門系列-05常見佈局之RelaiveLayout(相對佈局)
接著上一篇提到的線性佈局,如果說線性佈局是遵循一種順序排放,一處存在一個元件就不會存在另一個。那麼相對佈局則是位置上的相對關係(對於其他元件),不指定相對位置則會堆在一起重疊起來。 1.什麼是相對佈局 相對佈局指的是有參照的佈局方式,就是以某個兄弟元件,或者父容器來決定元
安卓開發5——利用ContentProvider獲取手機聯絡人
目錄 一、實驗內容 二、作業過程和結果 三、完整程式碼 一、實驗內容 使用ContentProvider獲取手機聯絡人。 二、作業過程和結果 1、首先在模擬器中新增幾個聯絡人,作為本專案的獲取目標。 &nbs
手把手教你安卓入門(一)
部落格 學院 下載 GitChat 論壇 寫部落格 發Chat
若水老師 安卓入門學習視訊教程 43集安卓視訊教程 Android開發從零開始視訊教程
課程目錄: 1.Android開發環境搭建.mp4 10.LinearLayout學習.mp4 11.AbsoluteLayout和FrameLayout.mp4 12.RelativeLayout.mp4 12.RelativeLayout補充.mp4
安卓介面基本元件---按鈕
所有的UI元件裡面,功能最容易被理解的恐怕就是按鈕。安卓UI元件中提供了兩個按鈕:普通按鈕和圖片按鈕,區別在於圖片按鈕顯示的是一個圖片。試想:開發遊戲程式介面,放置一個沒有任何效果的普通按鈕,將會大大降低遊戲的趣味。 由於按鈕比較簡單,所以本篇文章結構也比較簡單。文章前面介
Android四大元件—ContentProvider
1.內容提供器簡介 內容提供器(Content Provider)主要用於在不同的應用程式之間實現資料共享的功能, 它提供了一套完整的機制,允許一個程式訪 問另一個程式中的資料,同時還能保證被訪資料 的安全性。目前,使用內容提供器是 Android 實現跨程式共享資料的標準