Android Volley 教學 (Java 篇)
常見的 HTTP 網路資料請求連線套件
Volley 官方介紹與使用教學
https://developer.android.com/training/volley
添加 Volley 依賴庫 (dependencies)
在 GRADLE (Module) 層級 dependencies 內加入:
implementation 'com.android.volley:volley:1.1.1'
若想將資料轉成 Gson,可以加入:
implementation 'com.google.code.gson:gson:2.8.6'
若想使用最新版本可以到 mvnrepository 查看最新版號:
權限宣告 (permissions)
連線網路,需在 AndroidManifest.xml 中宣告:
<uses-permission android:name="android.permission.INTERNET" />
JSONPlaceholder 假資料網站
這一次範例我們將使用 JSONPlaceholder 所提供的假資料 RESTful API 來做串接練習。
JSONPlaceholder 提供六種常用資源,如:貼文、照片、用戶…等假資料、。
還有 GET、POST、PUT、PATCH、DELETE 等 HTTP 請求方法可以使用。
其中可以透過呼叫 https://jsonplaceholder.typicode.com/posts 可以得到回應格式為 json 的資料。
[
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
},
...
...
...
]
Post 資料類別
根據上面的 json 回應資料,我們可以設計出我們的 Post.java 資料類別為:
public class Post {
private int id;
private String title;
private String body;
private int userId;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
}
Ps.資料類別,老司機通常會在 Android Studio 裝 plugins 套件: Json2Class ,只要將 json 輸出資料貼上,即可快速幫你轉出資料別。
當然也可以透過手動宣告資料欄位與名稱,再按右鍵快速產出 getter and setter。
這邊要注意的是資料類別中的欄位名稱一定要跟 json 輸出資料名稱一致,若不相同,抓的資料將會是 null。資料欄位一多,出錯機率就容易高,KT 這邊會建議資料類別就交由外掛套件來產生,減少事後名稱校正半天。
Volley 使用方式
有我們剛剛定義的 Post 資料類別後,即可以來使用 Volley 連線功能。
RequestQueue queue = Volley.newRequestQueue(this);
String url = "https://jsonplaceholder.typicode.com/posts";
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// 連線成功
//使用 Gson 解析 Json 資料
Post[] posts = new Gson().fromJson(response, Post[].class);
for (Post item : posts) {
Log.d("HKT", "id: " + item.getId());
Log.d("HKT", "title: " + item.getTitle());
Log.d("HKT", "body: " + item.getBody());
Log.d("HKT", "userId: " + item.getUserId());
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// 連線失敗
Log.d("HKT", error.toString());
}
});
queue.add(stringRequest);
常見錯誤
Q1
Trying to parse JSON data from URL : Unable to resolve host “jsonplaceholder.typicode.com”: No address associated with hostname
若發生以上類似錯誤,有可能你忘記在 AndroidManifest 宣告,使用網路權限,另外一個就是你的網路不通。
贊助我們
創作不易,知識無價,免費線上教學就像顆種子,希望藉由您的支持與贊助,能夠無後顧之憂的日漸茁壯,努力前行堅持下去。不論捐贈金額的大小,我們都由衷的感謝每位贊助者,都是我們推廣知識、開放共享知識最大的動力!
您的捐贈將用於:請作者喝杯咖啡,鼓勵繼續創作,持續上傳教學影片與更多新技術文章。
Line Pay 打賞
(由 Line Pay 支付平台,提供一卡通轉帳服務)
街口打賞
(由街口行動支付平台,提供轉帳服務)
超商代碼繳費打賞
(由綠界科技支付平台,提供超商繳費代碼)
相關連結
HKT 線上教室 每週六日 更新影片
▶ YouTube 頻道
https://goo.gl/3f2pJi
▶ KT 線上教室 臉書粉絲團
https://goo.gl/27H9Li
▶ Udemy 頻道
http://bit.ly/2ZNdnrt
▶ 贊助我們
https://goo.gl/FiKXAu
從零開始學 Dart 程式設計 線上影片教學(完整版)
🎬 http://bit.ly/32toHt3
Flutter 程式設計入門實戰 30 天 線上影片教學(完整版)
🎬 http://bit.ly/2t1SjBu
從零開始學 Java 程式設計 線上影片教學(完整版)
🎬 http://bit.ly/376wXCx
從零開始學 kotlin 程式設計 線上影片教學(完整版)
🎬 http://bit.ly/2ODUanq
APP / Dart / Flutter / Android Studio
Android / iOS / Java / Kotlin / 教學 / 開發