udacity 之 android學習筆記:lesson 2,udacityandroid
udacity android lesson 2 學習筆記
作者:乾貨店打雜的 /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/
這裡我們從2-17開始,至此我們的demo可以顯示List,但是網路通訊的代碼放在主線程裡,所以我們需要改進他。
refresh .. async is not optional
當activity組件被某些東西終止,比如旋轉螢幕。data傳輸會受影響
todo activity聲明周期better way
- not use refresh button
- not effect by the activity lifecycle
menu +buttons
原理上是
代碼上體現,簡言之,就是更新Menu.xml下面的item內容
此後,考慮refresh button,修改位置是layout相關的xml.
運行demo後,button並沒有顯示,建立button的代碼當前還沒有更新
如果button沒有顯示,請check圖中給出api
上面給出初始化refresh button和button響應的相關代碼
不完美,繼續改進
直接運行以上代碼,crash
原因是許可權問題(沒有申請 internet許可權),catherine非常有趣的製造的錯誤,同時也交給我們如何使用logcat來診斷app的錯誤,真是授人以漁!
許可權機制 沙箱
解決方案:當前,只請求需要的許可權
不可避免請求高的許可權,可以思考有沒有替代方案
- 如用intent啟動應用(如相機)
- 共用資料的方法:例如使用intent和content provider 架構應用程式沙箱
internet 許可權 管制
使用者可以動態拒絕的許可權的賦予。
簡言之,我要使用者來決定是否賦予某種許可權,
那麼我需要在androidManifest.xml給出
android.permission.INTERNET
在拿到INTERNET許可權後,
catherine 接著在代碼層次講解了 JSON資料的調用,並在命令列下利用loagcat看到了沒有解析的JSON資料,其實這又是一種debug方法的示範
至此,我們的demo可以成功接收到資料啦。
自訂參數(郵編)
- 以前的請求串是字串拼接
- 現在的請求串是uribuilder構建
- 檢測方法,logcat
帶參數的fetchweathertask
往下看看urlbuilder的真面目,還有調試的介面吧
json解析json屬性
- json fromater 閱讀器
簡言之整理需求
- max tempature ?
有趣的發現,udacity網站竟然還有線上的java json練習
一種典型樹狀資料結構的解析
!! jason parsing
在瞭解基礎後,我們將有3個函數處理json
helper method
- formate date
- fromae the max/min temperature
- transfer the JSON string to array we need (這裡就用到上個小節的解析方法)
幾乎所有的方法都在 FetchWeatherTask的doInBackground中調用
當功能正確,我們將會得到以下輸出
update the adpater + UI
this is the 2-42 lesson and 2-43 ‘s content.
hotkey is “ctrl+o” ,it can give method of parent class
我眼中的arrayAdapter就是前台進程(asyncTask)和後台通訊的橋樑
分析arrayAdapter
資料共用的策略
- 將以前的private arrayAdapter 變為全域變數
如果初始化arrayAdpater有誤,將會有unsupported operation exception
上述描述 待運行實際代碼後更新
更新onPostExecute
接著 我們將更新 onPostExecute
,這裡我們將會看到Listview的更新
更新listview的兩種策略- 低版本(<honeyComb),使用迭代器- 高版本(>=honeyComb),使用addall
架構圖 回憶
資料更新導致view更新的流程
話說 adapter.nofitfyDatasetChanged()是被自動調用,我們看看真相。
深入淺出 原始碼
你需要查看framework下面的arrayadpater.java
- add方法,調用了nofitfyDatasetChanged
- addAll方法,也調用了nofitfyDatasetChanged
- 從效率來說,addAll針對一組資料只調用一次nofitfyDatasetChanged,因此效率更高
這其實就是傳說中的觀察者設計模式
tips:android frame code是個寶箱!某種程度上說,對android framework的瞭解程度決定android程式員的水平
take a screenshot
可以利用android debug monitor的內建功能,協助開發人員來標示進度
至此,refresh功能完工,
還是給catherine爆張照片出來吧,好歡樂的程式媛
catherine 準備大睡一場啊,lesson3見
其他
視頻的 47,48,49,50,51十一前的重複。
所以你可以小憩一下啦
todo
第二章 所有代碼運行後,我會更新部分章節