安卓學習筆記——URI
一、URI:統一資源定位符,Universal Resource Identifier的簡稱
每一個ContentProvider都擁有一個公共的URI,這個URI用于表示ContentProvider提供的數據
二、URI的組成:
例:
content://com.example.codelab.transportationprovider/train:要操作train數據資源所有的記錄(如train表)
content://com.example.codelab.transportationprovider/train/10:要操作train數據資源中id為10的記錄(如train表中id為10的記錄)
content://com.example.codelab.transportationprovider/train/10/name:要操作train數據資源中id為10的記錄的name字段
content://com.example.codelab.transportationprovider/train/international:要操作train表下的子表international
content://media/external:這個Uri將返回設備上存儲的所有圖片;
content://media/external/images/media/4:某個圖片的Uri
content://contacts/people:這個Uri將返回設備上的所有聯系人信息
三、URI 常用方法:
1、static Uri parse(String UriString):將一個字符串轉換為Uri
例如:
Uri uri = Uri.parse("content://cn.itcast.provider.personprovider/person/2")
2、 List getPathSegments():獲取uri中path路徑部分存入一個List中
例如:
uri.getPathSegments().get(1)
content://mars.cp.FirstContentProvider/users/1
四、UriMatcher類與ContentUris類的引入
因為Uri代表了要操作的數據,所以我們經常需要解析Uri,并從Uri中獲取數據。
Android系統提供了兩個用于操作Uri的工具類:
UriMatcher
ContentUris
五、UriMatcher類
UriMatcher用于匹配Uri,當應用程序通過URI訪問ContentProvider時,UriMatcher則檢查該Uri是否符合標準,如果符合標準,則使用該URI
1、UriMatcher檢查URI是否合法的原理:
對于一個URI的規則起一個編號,如果該Uri符合該原則,則返回該編號,否則則不返回編號即沒有這個規則。從而判定URI是否合法
2、UriMatcher類的使用步驟:
①、初始化UriMatcher類
②、設置所需的Uri規則
③、與已經注冊的Uri進行匹配
3、UriMatcher類的具體使用:
①、第一步:初始化
構造函數:創建URI樹的根節點
- public UriMatcher():默認根節點編碼為-1;
- public UriMatcher(int code):code參數指定根節點的編碼。
例
UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//常量UriMatcher.NO_MATCH表示Uri不匹配時的返回碼
②、第二步設置需要匹配Uri路徑規則
sMatcher.addURI(“cn.itcast.provider.personprovider”, “person”, 1);//添加需要匹配uri(content://cn.itcast.provider.personprovider/person),如果匹配成功就會給該Uri一個匹配碼1
sMatcher.addURI(“cn.itcast.provider.personprovider”, “person/#”, 2);//#號為數字通配符,用了匹配任何數字,*匹配任何字符
匹配碼的值需要大于0,否則拋出IllegalArgument異常
③、第三步:用match()方法匹配Uri,返回匹配碼。
switch (sMatcher.match(Uri.parse("content://cn.itcast.provider.personprovider/person/10"))) {
case 1:。。。。。。
break;
case 2:。。。。。。。
break;
default://不匹配
break;
}
六:ContentUris類
ContentUris類用于操作Uri路徑后面的ID部分。該類下的方法都為靜態方法。
它有兩個比較實用的方法:
1、public static Uri withAppendedId (Uri contentUri, long id)
該方法用于為路徑加上ID部分。
Uri uri = Uri.parse("content://cn.itcast.provider.personprovider/person")
Uri resultUri = ContentUris.withAppendedId(uri, 10);
//生成后的Uri為:content://cn.itcast.provider.personprovider/person/10
2、public static long parseId (Uri contentUri)
該方法用于從路徑中獲取ID部分。
(id是指數據庫中每條記錄的唯一標識,即id號。)
Uri uri = Uri.parse("content://cn.itcast.provider.personprovider/person/10")
long personid = ContentUris.parseId(uri);//獲取的結果為:10
智能推薦
安卓學習筆記之Handler
UI線程 當系統啟動的時候,就會創建一個主線程(Main Thread),然后這個主線程向UI組件分發事件,主線程和UI的組件進行交互,故稱UI線程。 線程安全 Android的UI線程是不安全的。引用一下,百度百科的解釋 線程安全就是多線程訪問時,采用了加鎖機制,當一個線程訪問該類的某個數據時,進行保護,其他線程不能進行訪問直到該線程讀取完,其他線程才可使用。不會出現數據不一致或者數據污染。 線...
安卓學習筆記之Okhttp
什么是okhttp? 我們如果原生的去寫一個網絡請求,需要用到的是HttpConnection等相關類去實現的,但是編寫原生的網絡請求,需要我們來實現更多復雜的功能,比如斷點續傳,都需要花費很長的時間去寫。效率也不高。所以我們為了方便在開發過程中能夠省電精力,需要運用到第三方網絡框架,那就是Okhttp。 Okhttp的使用 manifest添加網絡權限 < uses-permission ...
安卓學習筆記之IntentService
什么是IntentService 它會創建一個獨立的子線程來處理所有的Intent請求,創建的子線程來處理onHandleIntent()實現的代碼,無需處理多線程的問題。默認實現onBind()方法,返回為null;默認實現onStartCommand()方法,將請求的Intent添加到隊列中。這個類實際上是繼承自service,內部是封裝了HandlerThread和Handler類。 代碼實...
安卓學習筆記之Activity(一)
** 安卓四大組件之Activity ** 1.介紹 ** Activity的出現無處不在,從手機開始啟動的第一個頁面的都是Activity。主要用于可見的狀態與用戶進行交互。好比一張紙,我們需要用代碼這只“筆”來描繪一些信息告訴讀者,這張紙里面有些什么內容和需要操作什么東西。總的來說就是能看到的基本上和Activity。如果有什么錯誤的地方,希望大家指出。感激不盡。 既然...
安卓學習筆記之service(一)
安卓四大組件之Service 今天來入門一下service這個組件,這玩意是在你后臺做一些必要的工作。 ** 1.什么是service? ** 從google官網看的,官方的描述是這樣的。 A Service is an application component representing either an application’s desire to perform a long...
猜你喜歡
安卓學習筆記10:相對布局
文章目錄 零、學習目標 一、相對布局 1、布局特點 2、繼承關系圖 3、常用屬性 (1)相對于父容器居中 (2)相對于其它控件的位置 (3)相對于其它控件對齊 (4)相對于父容器對齊 (5)標識符問題 二、教學案例 —— 相對布局演示 (一)運行效果 (二)實現步驟 1、創建安卓應用【RelativeLayoutDemo】 2、主布局資源文件activity_main.xm...
安卓學習筆記08:線性布局
文章目錄 零、學習目標 一、界面與布局概述 (一)界面 (二)布局 1、視圖層次結構圖 2、UI容器 (Container) 3、UI控件 (Control) 4、兩種方式聲明布局 二、線性布局 (一)繼承關系圖 (二)常用屬性 (三)案例演示 —— 線性布局屬性 1、創建安卓應用【LinearLayoutDemo】 2、主布局資源文件activity_main.xml (...
安卓學習筆記——服務(Service)
目錄 安卓實驗(Service) 1. 創建兩個按鈕控件 2. 創建用于計時的服務(Service) 3. 注冊TimerService服務 4. 按鈕功能實現 5. 進行調試運行 安卓實驗(Service) 在Android Studio創建計時服務,并使用兩個按鈕進行控制 1. 創建兩個按鈕控件 在activity_main.xml中添加如下代碼新建兩個按鈕控件,也可在Design窗口中拖動控...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...