---
# System prepended metadata

title: 【Android課程影片】
tags: [前端, Android, java]

---

# 【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)










































