# 【Android課程影片】 ###### tags: `前端` `Android` `java` ## Activity的傳值 **上課時間2020/05/07** 在跳轉頁面的觸發按鈕設定Intent物件 ![](https://i.imgur.com/aLIOXkE.png) 建立Teacher類別作為資料庫的使用者 ![](https://i.imgur.com/9qeTiX1.png) 在login頁面暫時建立Teacher進行測試 ![](https://i.imgur.com/aWniLAh.png) 說明--------------------------------------------------------------------------------------- [【APP/Android】如何使用Intent, Bundle:在兩個Activity之間傳遞資料](https://spicyboyd.blogspot.com/2018/03/appintent-bundleactivity.html) **跨頁面傳遞:傳入Bundle元件比較有彈性 ![](https://i.imgur.com/B78iLhW.png) **Bundle傳遞「序列化物件」的方法: 1.putParcelable() <<<Google提供,在記憶體內編譯,效能較佳,好用但可能有bug。 2.putSerializable() <<<序列化需經過I/O,比較慢 ![](https://i.imgur.com/O7qA10v.png) ![](https://i.imgur.com/jd25arU.png) 說明--------------------------------------------------------------------------------------- 課堂範例:實現Serializable讓Teacher類別能夠序列化 (意即想讓某資料序列化 只要實現Serializable介面即可) ![](https://i.imgur.com/SrB7n7E.png) 實現Serializable介面的類別(Teacher)可傳入Bundle的putSerializable()方法中。 ![](https://i.imgur.com/fITeEuk.png) 將Bundle別放進Intent之中,達成頁面切換時傳遞資料的效果 ![](https://i.imgur.com/6oNpabi.png) 1.利用Activity本身的getIntent( )方法從Intent中取得Bundle的實體 2.被取出的序列化資料必須經過'強制轉型'指定資料的型態 ![](https://i.imgur.com/9Z2dpWG.png) --- # Postman_API 1.Postman用途:測試API是否正常運作,例如: >1) 驗證發送網路請求傳遞的參數會得到的結果; >2) 模擬送出資料與取得資料; >3) 測試API是否能正確存取外部資料庫(in網路)的內容; >4) 網路連線的介面 > >[**POSTMAN使用教學**](https://xenby.com/b/151-%E6%8E%A8%E8%96%A6-%E4%BD%BF%E9%96%8B%E7%99%BCapi%E6%9B%B4%E6%96%B9%E4%BE%BF%E7%9A%84%E5%B7%A5%E5%85%B7-postman) 2.因資安考量,APP的資料庫必須設計成外部連接,讓資料庫可以限制APP對其進行的操作。 3.一些通用規範--**RESTful API** ![](https://i.imgur.com/3p3y4T4.png) **GET**:將資料的參數放在網址上->    放在?後面,叫做query;以路徑的形式放入資料參數(以/分隔),叫做params    打網址就能得到所有資源(一些隱匿性的資料如token例外)    能對所有人公開的資料才會這樣設計(不用帳密就能取得的資料) **POST**: 把資料放在BODY中(網址上看不到)>>>在Postman中要切換到Body頁面查看 ![](https://i.imgur.com/OZZb0Ey.png) >**form-data**:只能傳送**文字**與**檔案**兩種格式的資料 >->要傳檔案一定要用form-data格式 > >**x-www-form-urlencoded**: >URLencode:可以將特殊字符(ex.slash)轉換為特定編碼以免造成混淆 >![](https://i.imgur.com/O6UUnCO.png) > >**raw**:可以選擇撰寫的格式,其中JSON可以做到區分布林與數值,能傳較多種型態的資料 --- >**補充**: >[OSI七層模型](https://ithelp.ithome.com.tw/articles/10000021) >HPPT標準的請求方法:GET/POST/PUT/DELETE >資料庫基本操作方法:CREATE/READ(RETRIEVE)/UPDATE/DELETE ## Postman設定課堂範例 1. register頁面的設定資料 ![](https://i.imgur.com/JDjD3GJ.png) 2. login頁面的設定資料![](https://i.imgur.com/yrZbRZi.png) 3. updateUserInfo頁面的設定資料![](https://i.imgur.com/1N22Swt.png) 4. getUserInfo頁面的設定資料![](https://i.imgur.com/2Z59peW.png) # 課堂範例:讓開發中的應用程式連網獲取資料 ### 1.到[Android developers](https://developer.android.com/training/basics/network-ops/connecting#top_of_page)網站複製 讓APP獲取網路權限的語法 ![](https://i.imgur.com/sbc40Xn.png) ### 2.使用幫助連網的插件--**okhttp** (用插件的原因是,用java寫HTTP目前對我們來說太難了) (目前業界主流用okhttp,另有**retrofit**,比較進階,暫不介紹) >[okhttp GitHub網站](https://github.com/square/okhttp): >注意往後在使用各種插件時,須注意**開放授權範圍**的問題 >--->本網站可以從License的地方查看是否開放各種權限 >![](https://i.imgur.com/KLfw8Md.png) > >![](https://i.imgur.com/wbchhlZ.png) > >查看權限的頁面: >![](https://i.imgur.com/5WdPrcu.png) > >複製該網頁Release內容區塊的語法,貼至AS中Gradle(構建工具)部分的頁面 >接著按下Sync Now >![](https://i.imgur.com/J05G7j4.png) > >檢查插件是否完成匯入(Gradle:com.squareup.okhttp3:~) >![](https://i.imgur.com/671DB7E.png) > >![](https://i.imgur.com/HfBB1uP.png) > ### 3.至[Okhttp Recipes](https://square.github.io/okhttp/recipes/#posting-form-parameters-kt-java)網站複製Posting form >parameters區域的程式碼,貼入類別NetworkController之中;貼入程式碼後一一匯入(Alt+Enter)報紅字的類別 >![](https://i.imgur.com/aWzzMuL.png) > >**概念:連接網路執行緒與刷畫面的執行緒(thread)必須分開 (Android Studio如果發現網路連線在主執行緒裡面跑,會出現NetworkOnMainThreadException的錯誤-->無法送出網路請求) >![](https://i.imgur.com/O2Uvejp.png) > >**補充:java的多執行緒藉由"繼承Thread類別、覆寫run()方法"實現 >**[ java執行緒教學影片](https://www.youtube.com/watch?v=ZArRNlKweiU) ### 4.在NetworkController頁面中藉由OkHttp插件提取API的操作 >刪除原本的try{}catch(){}區域,利用類別Client呼叫下圖方法 >![](https://i.imgur.com/butuVLy.png) > >藉由Response類別中的方法取出API的資料 >![](https://i.imgur.com/KyfmmRQ.png) > >![](https://i.imgur.com/C0V3LIZ.png) > >![](https://i.imgur.com/Y4Hv26p.png) > >**(測試函式確認能取得正確資料後請刪除)** >![](https://i.imgur.com/agIC0ai.png) ### 5.對onResponse的地方進行改良 >如下圖,修改前我們只能在onResponse函式中取得API的資料,讓API回傳的結果無法為其他頁面所用 >修改後的函式讓兩個頁面可以實現同一個API的方法,但進行不一樣的行為 >![](https://i.imgur.com/rewdn7E.png) > -----------------(以下截圖說明待補)----------------- ![](https://i.imgur.com/DOu4ViK.png) ![](https://i.imgur.com/jd1EEIu.png) ![](https://i.imgur.com/eB48u3x.png) ![](https://i.imgur.com/f8VrEv3.png) ![](https://i.imgur.com/eyjYrxd.png) ![](https://i.imgur.com/etpWVl2.png) ![](https://i.imgur.com/W1oxO6g.png) ![](https://i.imgur.com/P5ELYki.png) ![](https://i.imgur.com/JHwar1S.png) ![](https://i.imgur.com/WlpXuxF.png) ![](https://i.imgur.com/nU95c03.png) ![](https://i.imgur.com/iqDnpRP.png) ![](https://i.imgur.com/E4whryc.png) ![](https://i.imgur.com/nU2uVLD.png) ![](https://i.imgur.com/FnWxil5.png) ![](https://i.imgur.com/775pDKT.png) ![](https://i.imgur.com/ljmmk0H.png) ![](https://i.imgur.com/aaa75Ic.png) ![](https://i.imgur.com/Gz408IL.png)