Android中Content Provider
在Android技術持久化技術中,包含著檔案儲存,SharedPreferences儲存以及SQLite,在這些持久化技術中儲存到資料都只能在當前應用程式中訪問,那麼如何將資料共享給其他程式呢?那就要說到
Content Provider(內容提供器)
在內容提供器中,有別於檔案儲存這類的是,他可以指定想要共享的部分,而不是全域性共享
對於每一個應用程式來說,如果想要訪問內容提供器 裡共享的資料,就一定要藉助ContentResolver類,透過getContent -Resolver獲取例項,在 ContentResolver中提供了一系CRUD(增刪改查)的方法進行操作其中
-
insert,新增資料
-
update,更新資料
-
delete,刪除資料
-
query,查詢資料
不同於SQLiteDatebase, ContentResolver中的CRUD是使用一個Uri引數代替,這個引數被稱為內容引數,由兩部分組成:authority和path。authority主要用來對不同應用進行區分,path用於對同一個應用的不同表進行區分
例如:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button addData = (Button) findViewById(R.id.add_data); addData.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 新增資料 Uri uri = Uri.parse("content://com.example.databasetest.provider/book"); ContentValues values = new ContentValues(); values.put("name", "A Clash of Kings"); values.put("author", "George Martin"); values.put("pages", 1040); values.put("price", 55.55); Uri newUri = getContentResolver().insert(uri, values); newId = newUri.getPathSegments().get(1); } }); Button queryData = (Button) findViewById(R.id.query_data); queryData.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 查詢資料 Uri uri = Uri.parse("content://com.example.databasetest.provider/book"); Cursor cursor = getContentResolver().query(uri, null, null, null, null); if (cursor != null) { while (cursor.moveToNext()) { String name = cursor.getString(cursor. getColumnIndex("name")); String author = cursor.getString(cursor. getColumnIndex("author")); int pages = cursor.getInt(cursor.getColumnIndex ("pages")); double price = cursor.getDouble(cursor. getColumnIndex("price")); Log.d("MainActivity", "book name is " + name); Log.d("MainActivity", "book author is " + author); Log.d("MainActivity", "book pages is " + pages); Log.d("MainActivity", "book price is " + price); } cursor.close(); } } }); Button updateData = (Button) findViewById(R.id.update_data); updateData.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 更新資料 Uri uri = Uri.parse("content://com.example.databasetest.provider/book/" + newId); ContentValues values = new ContentValues(); values.put("name", "A Storm of Swords"); values.put("pages", 1216); values.put("price", 24.05); getContentResolver().update(uri, values, null, null); } }); Button deleteData = (Button) findViewById(R.id.delete_data); deleteData.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 刪除資料 Uri uri = Uri.parse("content://com.example.databasetest.provider/book/" + newId); getContentResolver().delete(uri, null, null); } }); }
似乎很簡單的樣子,但是這樣就一定安全嗎?或者說是所有人都用這個方法去共享資料的嗎,如果不是呢?這就要說到自己建立內容提供器
繼承ContentProvider,然後實現他的六個抽象方法即可
-
onCreate()
-
query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder)
-
insert(Uri uri,ContentValues values)
-
updaya(Uri uri,ContentValues values)
-
updata(Uri uri,ContenValues values,String selection,String[]selectionArgs)
-
delete(Uri uri,String selection,String[] selectionArgs)
-
getType(Uri uri)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2682078/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android Content Provider SecurityAndroidIDE
- android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetAndroidXMLIDE
- Android7.0行為變更:適配File ProviderAndroidIDE
- HTTP協議中Content-TypeHTTP協議
- Django中content_type的使用Django
- CSS中content屬性的妙用CSS
- SCSS @contentCSS
- CSS contentCSS
- .Net 如何修改 HttpHeaders 中的 Content-DispositionHTTPHeader
- java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Intent.getI...JavaNullExceptionAndroidIntent
- provider之selectorIDE
- 請求協議中的content-type頭協議
- Content Security Policy
- CSS content character ACSS
- Laravel 2.3 Service ProviderLaravelIDE
- 為什麼偽類的content不能被選中?
- Flutter狀態管理Provider(三)基於Provider的程式碼框架FlutterIDE框架
- CSS align-contentCSS
- CSS justify-contentCSS
- file_get_content
- flex佈局中的algin-items 與align-contentFlex
- Flutter Provider使用指南FlutterIDE
- 自己寫一個ProviderIDE
- Flutter Provider and Streams [翻譯]FlutterIDE
- read content in a text file in pythonPython
- [Bash] Append the content at the beginning of the fileAPP
- requests庫中r.content 與 r.read() 的使用方式
- Flutter Provider 之 FutureProvider 與 StreamProviderFlutterIDE
- 域滲透——Security Support ProviderIDE
- Flutter Provider 3.0實戰教程FlutterIDE
- Flutter Provider狀態管理框架FlutterIDE框架
- provider for back&restore app datyaIDERESTAPP
- 理解HTTP之 content-typeHTTP
- http Content-Type 知多少HTTP
- Content Security Policy (CSP) 介紹
- Boost Your Strategy With The Content Marketing Tools
- HTTP Content-Type型別HTTP型別
- [HTTP] HTTP 協議 Response Header 之 Content-Length、Transfer-Encoding與Content-EncodingHTTP協議HeaderEncoding