標籤:android udacity
udacity android 學習筆記: lesson 4 part b
乾貨店打雜的 /titer1 /Archimedes
出處:https://code.csdn.net/titer1
聯絡:1307316一九六八
聲明:本文採用以下協議進行授權: 自由轉載-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,轉載請註明作者及出處。
tips:https://code.csdn.net/titer1/pat_aha/blob/master/Markdown/android/
lesson 4b,後期將拆分為4大小節強烈建議保留自己重新命名的字幕,重新壓制29 units are waitted 上一章節完成了 db的建立和內容的建立,這章節將講到content provider,期待所有內容的大團結(匯總)
why contents providers matter
如何 理解 多個app 與一個 content provider 的聯絡
一 create a content provider
more todo
深入 分析contentProvider,
see instructor notes below
在api sdk中
1.1 what is URI
data is assiated with views in the terms of universal resource identifiers or URIs.
一句話,universal resource identifiers簡稱
又見觀察者模式the code register an android construct called a content observer
1.2 重點 反覆 how to build a content provider
- determine URIs
- update contract
- fill out URI matcher
- Implement fuctions
1.2.1 define a URI
- weather / location for insert /update/delete
- weather_with_location 多天情況
- weather_with_location_and_date 一天情況
回顧 contractit is an agreement etween the data models , storrage, and views下一步將會講到如何 更新 contract
1.2.2 update URI
4b-3 lesson todo? 為什麼要綁定一串數字?一個URI對應一常數?最好的事就是這裡加上調試的記錄(動態)
這章節就是在講 weatherContract類的變化
- add content_URI
- add content_type
細心的人會發現,中的部分是為URI的初始化做準備
這是需要後續代碼跟蹤的位置,這裡構成query.
build uri
下面是checklist
看,注意本圖 和 上去兩個圖的區別
- buildweatheruri 以前是沒有實現的
1.2.3 fill out URImatcher
urimatcher:
uses a simple expression ayntax to help us match URI’s for a content provider
直覺,Regex
- #表示number
- *表示string
實踐時間
讓我們看看下一步幹什麼
代碼如上,就是這樣
以前是fake data,現在是基於資料庫的data 構成uri
1.2.4 content provider1 2 4 1 register the content provider
複習,什麼是contact ?約定?進入到 test provider 的環節,
lesson 4b_9 now
1 2 4 2 content provider replace the SQL ?
register now, tell all(include pakage manager) by xml format
here, the content resolver can resolve it!
next to do:
now ,code time
1 2 4 3 code the content rovider 之 oncreate
時刻想著 這是最後一個環節,contenprovider..這裡關注期中的onCreate
gettype 是 content provider的一函數
猶如注釋說的,這裡的函數作用就是為了測試uribuilder的使用
還有我們的任務就是添加 weather_with_location_and_date等的響應
品讀注釋,作用就在這裡
最終這裡介紹了原始testGetYpe, 但是不會最終使用!故注釋
又見到todo list
不過答案很快就有了,
比上上一個圖,我們增加了兩種 uri類型
1 2 4 4 難 code the content rovider 之 query
剛剛把子標題標註好了,oh ,yeah!悄悄看了下prtplayer 的視頻選項,驚歎 多媒體播放器的整合畫質修改! yeah!細心的點開 曆史版本記錄,知道potplayer的開發曆程,艱辛!
這就是query,傳說中比較複雜的函數
下面是query函數的底部,有重要要說
- tell the observer they listen to the changes that happen to that URI and any of its descendants
又見觀察者模式,介面感知底層增/減/變,都靠它了話說 setNotificationUri不止一處,待確認.
當所有的query代碼添加好了,我們可以開啟以下的注釋,測試我們的provider
來吧,又是一個任務
這是 完成 所有query的時候,aha!
first weahther query code:
then, location query code:
初步比較,感覺直覺第一個參數,table名字不一樣。
有了兩張表,不操作的話,就是獨立的兩張表,但是需要inner join他們
所以
meaning :
tbl inner join tbl2 on tbl.loc_key = tbl2.id
以下是selection,我認為就是協助記憶的
以下是調用sqlbuilder query相關函數,
- 調用了 sqlbuiler(簡稱呼)
- 使用了剛才封裝的selection字元函數
- 參數(location/startDate)來源於uri
以上只有location,下面將同時包含location和date進行查詢
以上兩個函數都被一下調用,content provider的query
可以為上面的三個函數圖 繪製一個調用diagram其他:有沒有線上 sql 資料庫 文法 練習器online sql
小憩
- 如果單張表的查詢(只看天氣或者Location),直接在content provider的query函數中調用
sql相關的qurey函數
- 如果涉及到兩張表的查詢,就要單獨處理,這裡使用了 sqliteQueryBuilder
query操作完成,不過第四環節還有其他動作,繼續
task insert
前篇有2分鐘,代碼就是上面這幅,不過細節
- 異常處理
- 插入uri 相關的trick (待研究insert時深入 todo)
又見任務牌,先在目標就是完善insert
”’
強烈建議保留自己重新命名的字幕,重新壓制
”’
get id for insert ? now:
tell oberserver now:
測試驅動的開發,如下,漂亮
task update + delete
lesson 4b_22這裡的套路 和 Inset 是一樣的,取得 row courserr ,tell obersver... have a test所以要補圖,或者補代碼,後期補上,ok
todo
update get couser
update fun tell observer
delete function get courser
delete functionj tell obersver
call the test unit to ganrantee the work
高效的 update & insert
批量插入 比 逐條插入 快封裝為事務 transaction第一輪的直覺,這不是 高效,這是為了 方便 交易回復?todo 思考 ,快多少? 10倍?
反覆 總結篇 content provider redux
理論上,我應該把經典的圖再給站上來。、其實應該把這裡雖有字幕給摘抄出來,逐步分析。todo最後一句,“but we still use it in our code ”,後續將會用到實際項目裡面
todocreat fetch weahter task
拍一個有羽毛的機器人吧重構
udacity android 學習筆記: lesson 4 part b