Workshop記錄-Volley與API
對於Volley,我一直以來都只是會用,不曾深入了解。2019/05/18-19,我們規劃了一場Workshop,希望能讓新進的夥伴了解,API怎麼開?怎麼接?讓未來各組在專案的合作上可以更了解彼此的想法。
沒想到在事前準備教材的過程中,我也收穫了不少,雖然有點可惜,Workshop那天沒有講完。這篇文章主要記錄我學到的Volley用法,與整理Workshop當天的教材,也包括來不及講到的部分。
簡介
Volley是Google於2013年推出的網路連線框架,讓連線可以更簡單、快速。簡化了HTTP程式處理邏輯與提高執行效率。由於Volley快取的特性,適合頻繁、資料量小的傳輸。如果是較大流量傳輸,可以考慮HttpURLConnection、HttpClient等其他方式。
(Life of a request. 節自 Android開發指南)
當一個Request被加到Queue之後,會先檢查Cache中有沒資料,如果有,就會直接從Cache中回傳;如果沒有,再到網路上存取。
Volley和API可以做什麼
- 搭配網路連線的APP,能做的應用更多
- 行雲者近期的APP專案常用Volley串接API
- 透過API,可以傳資料到伺服器,或從伺服器取得資料
其實我有找到一個套件可以讓手機可以直接和資料庫連線,JDBC。
但是不知道各位有想過,為什麼我們不用APP,直接存取伺服器資料庫的內容嗎?
這個其實我還沒有確切的答案,以下是我的想法:
- 透過API我們可以統一取得的內容與格式,我們可以統一API的格式,例如JSON。不管是Android、iOS或網頁,都可以透過同一支API拿到一樣的資料。
- 另外,是安全性問題。當APK被反編譯,可能可以取的程式碼裡面,資料庫的IP、帳號、密碼等資訊。
實作
載入套件
在build.gradle(Module: app)
中載入volley的套件1
compile 'com.android.volley:volley:1.1.1
網路權限
在AndroidMenifest.xml
加網路權限1
<uses-permission android:name="android.permission.INTERNET" />
程式碼中的用到的API都放在文章最後的附錄
StringRequest(Get)
宣告變數
TextView是等下要用來顯示回傳內容的Volley
顯示內容
JsonObjectRequest
JSON Object 最外層的的括號是 { }
JsonArrayRequest
JSON Object 最外層的的括號是 [ ]
StringRequest(Post)
在大括號內按 Ctrl-O 搜尋 getParams() 可以補齊
下面Map<String,String> params的內容就是要傳給API的Key和Value
ImageRequest
先加個ImageView
宣告變數
Volley
圖片可以自己找網路上的
附錄
這邊有些簡單測試資料,如果沒有自己的Web Server,可以試試JSON Generator。
string.txt
1
This is a string!!
jsonArr.php
1
2
3
echo '[ "Ford", "BMW", "Fiat" ]';jsonObj.php
1
2
3
echo '{ "name":"John", "age":30, "car":null }';jsonPost.php
1
2
3
4
5
6
7
8
9
10
11
$id = $_POST['id'];
$pwd = $_POST['pwd'];
if($id != "" && $pwd != ""){
echo json_encode(array('id' => $id, 'pwd' => $pwd));
}else{
echo json_encode(array('msg' => "Please enter ID and password !"));
}
login.php
1
2
3
4
5
6
7
8
9
10
11
12
13
$id = $_POST['account'];
$pwd = $_POST['passwd'];
if($id == "" || $pwd == ""){
echo json_encode(array('success' => "0", 'message' => "Please enter ID and password !"));
}else if($pwd == "2019workshop"){
echo json_encode(array('success' => "1", 'message' => "Login Success!", 'data' => $id));
}else{
echo json_encode(array('success' => "0", "message" => "Login Failed !"));
}