# 【Android課程影片】 ###### tags: `前端` `Android` `java` ## Activity的傳值 **上課時間2020/05/07** 在跳轉頁面的觸發按鈕設定Intent物件  建立Teacher類別作為資料庫的使用者  在login頁面暫時建立Teacher進行測試  說明--------------------------------------------------------------------------------------- [【APP/Android】如何使用Intent, Bundle:在兩個Activity之間傳遞資料](https://spicyboyd.blogspot.com/2018/03/appintent-bundleactivity.html) **跨頁面傳遞:傳入Bundle元件比較有彈性  **Bundle傳遞「序列化物件」的方法: 1.putParcelable() <<<Google提供,在記憶體內編譯,效能較佳,好用但可能有bug。 2.putSerializable() <<<序列化需經過I/O,比較慢   說明--------------------------------------------------------------------------------------- 課堂範例:實現Serializable讓Teacher類別能夠序列化 (意即想讓某資料序列化 只要實現Serializable介面即可)  實現Serializable介面的類別(Teacher)可傳入Bundle的putSerializable()方法中。  將Bundle別放進Intent之中,達成頁面切換時傳遞資料的效果  1.利用Activity本身的getIntent( )方法從Intent中取得Bundle的實體 2.被取出的序列化資料必須經過'強制轉型'指定資料的型態  --- # 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**  **GET**:將資料的參數放在網址上-> 放在?後面,叫做query;以路徑的形式放入資料參數(以/分隔),叫做params 打網址就能得到所有資源(一些隱匿性的資料如token例外) 能對所有人公開的資料才會這樣設計(不用帳密就能取得的資料) **POST**: 把資料放在BODY中(網址上看不到)>>>在Postman中要切換到Body頁面查看  >**form-data**:只能傳送**文字**與**檔案**兩種格式的資料 >->要傳檔案一定要用form-data格式 > >**x-www-form-urlencoded**: >URLencode:可以將特殊字符(ex.slash)轉換為特定編碼以免造成混淆 > > >**raw**:可以選擇撰寫的格式,其中JSON可以做到區分布林與數值,能傳較多種型態的資料 --- >**補充**: >[OSI七層模型](https://ithelp.ithome.com.tw/articles/10000021) >HPPT標準的請求方法:GET/POST/PUT/DELETE >資料庫基本操作方法:CREATE/READ(RETRIEVE)/UPDATE/DELETE ## Postman設定課堂範例 1. register頁面的設定資料  2. login頁面的設定資料 3. updateUserInfo頁面的設定資料 4. getUserInfo頁面的設定資料 # 課堂範例:讓開發中的應用程式連網獲取資料 ### 1.到[Android developers](https://developer.android.com/training/basics/network-ops/connecting#top_of_page)網站複製 讓APP獲取網路權限的語法  ### 2.使用幫助連網的插件--**okhttp** (用插件的原因是,用java寫HTTP目前對我們來說太難了) (目前業界主流用okhttp,另有**retrofit**,比較進階,暫不介紹) >[okhttp GitHub網站](https://github.com/square/okhttp): >注意往後在使用各種插件時,須注意**開放授權範圍**的問題 >--->本網站可以從License的地方查看是否開放各種權限 > > > > >查看權限的頁面: > > >複製該網頁Release內容區塊的語法,貼至AS中Gradle(構建工具)部分的頁面 >接著按下Sync Now > > >檢查插件是否完成匯入(Gradle:com.squareup.okhttp3:~) > > > > ### 3.至[Okhttp Recipes](https://square.github.io/okhttp/recipes/#posting-form-parameters-kt-java)網站複製Posting form >parameters區域的程式碼,貼入類別NetworkController之中;貼入程式碼後一一匯入(Alt+Enter)報紅字的類別 > > >**概念:連接網路執行緒與刷畫面的執行緒(thread)必須分開 (Android Studio如果發現網路連線在主執行緒裡面跑,會出現NetworkOnMainThreadException的錯誤-->無法送出網路請求) > > >**補充:java的多執行緒藉由"繼承Thread類別、覆寫run()方法"實現 >**[ java執行緒教學影片](https://www.youtube.com/watch?v=ZArRNlKweiU) ### 4.在NetworkController頁面中藉由OkHttp插件提取API的操作 >刪除原本的try{}catch(){}區域,利用類別Client呼叫下圖方法 > > >藉由Response類別中的方法取出API的資料 > > > > > > >**(測試函式確認能取得正確資料後請刪除)** > ### 5.對onResponse的地方進行改良 >如下圖,修改前我們只能在onResponse函式中取得API的資料,讓API回傳的結果無法為其他頁面所用 >修改後的函式讓兩個頁面可以實現同一個API的方法,但進行不一樣的行為 > > -----------------(以下截圖說明待補)-----------------                   
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up