• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 安卓學習筆記之Content provider

    安卓四大組件之 content provider


    用途

    • 跨程序共享數據(為其他應用程序提供訪問數據的接口)

    • 利用Content Provider對數據進行封裝,有利于脫離對數據庫的依賴性(解耦)。改變底層數據庫,而上層數據查詢不用改變。


    什么是Content Provider?

    使用安卓存儲有五種方式,分別是

    1. 文件
    2. 網絡存儲
    3. 數據庫
    4. content provider
    5. sharedpreference

    其中content provider 是安卓四大組件之一,按照英文翻譯理解為,內容提供者。顧名思義,就是讓內容提供給別的應用程序 ,即跨應用提供數據的統一接口。

    直接上英文,權威一點。
    Content providers manage access to a structured set of data. They encapsulate the data, and provide mechanisms for defining data security. Content providers are the standard interface that connects data in one process with code running in another process.

    官方是這么解釋的,翻譯過來就是,Content provider管理android以結構化方式存放的數據。他以相對安全的方式封裝數據并且提供簡易的處理機制。Content provider提供不同進程間數據交互的標準化接口。


    既然是對數據進行操作,所以增刪查改必不可少的。
    下面我們演示一個簡單的demo
    首先是創建一個ContentPro類繼承自content provider類

    public class ContentPro extends ContentProvider {
        @Override
        public boolean onCreate() {
            return false;
        }
    
        @Nullable
        @Override
        public Cursor query(@NonNull Uri uri, @Nullable String[] strings, @Nullable String s, @Nullable String[] strings1, @Nullable String s1) {
            return null;
        }
    
        @Nullable
        @Override
        public String getType(@NonNull Uri uri) {
            return null;
        }
    
        @Nullable
        @Override
        public Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) {
            return null;
        }
    
        @Override
        public int delete(@NonNull Uri uri, @Nullable String s, @Nullable String[] strings) {
            return 0;
        }
    
        @Override
        public int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String s, @Nullable String[] strings) {
            return 0;
        }
    }
    

    繼承了類之后要對應的要實現8個方法。分別是
    繼承的方法

    也就是代碼中提到的方法。
    然后使用它之前和其它組件一樣,必須在Manifest清單文件里面進行聲明。

    <provider
        android:authorities="com.example.does.myapplication.ContentPro"
        android:name=".ContentPro">
    </provider>

    其中authorities這個屬性我們可以這樣理解為它的身份證。為了保證統一性,我們命名的方式是使用包名。


    使用到的類

    1. Content Resolver
      解析器,用來訪問content provider類

    2. Content Provider
      內容提供者,用來給其它程序提供數據,主要提供對外訪問的接口

    3. Uri
      用來區分應用程序,字段的url,分為三部分

    4. Uri.Builder
      用來連綴構建標準Uri的類

    5. ContentUris
      用來給Uri追加id和讀取Uri中的id的幫助類

    6. UriMatcher
      Content Provider用來處理(匹配)不同Uri的類,創建Content Provider的時候就依靠UriMatcher進行匹配從而確定對不同的Uri請求進行不同的操作,有以下兩個

    7. Uri的MIME類型


    如何使用?

    數據都是uri的形式向外公開的。

    我作為新手,水平有限,就簡單介紹一下,content provider規定數據形式的uri組成。

    有三個部分,分別是

    • scheme
      這是google規定的,scheme是 content://

    • 主機名(Authorities)
      這個就是我們在清單文件里面聲明的,相當于身份證,比如這里的

      com.example.does.myapplication.ContentPro,外部調用可以根據這個標識來找到它。

    • path
      路徑(Path)可以用來表示我們要操作的數據,路徑的構建根據業務而定。
    版權聲明:本文為qq_29157591原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_29157591/article/details/75041220

    智能推薦

    Flutter 全局控制器之Provider

    Flutter 全局控制器之Provider,常用來全局控制主題等 SwitchListTile ExpansionTile Provider全局控制器 接受自己的失敗,總比接受別人的失敗輕易。自己的失敗總是有理由的,譬如,時不我與,對手太陰險等。別人的失敗卻是活該。接受自己的成功比接受別人的成功輕易。接受自己的軟弱比接受別人的軟弱輕易。自己軟弱,是由于很多人需要自己照顧,所以不能隨便逞強。 先來...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    猜你喜歡

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    styled-components —— React 中的 CSS 最佳實踐

    https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...

    基于TCP/IP的網絡聊天室用Java來實現

    基于TCP/IP的網絡聊天室實現 開發工具:eclipse 開發環境:jdk1.8 發送端 接收端 工具類 運行截圖...

    精品国产乱码久久久久久蜜桃不卡