其實網路上很多大大們分享,其實我也使用一段時間了,用於下載網路圖片或是簡單的網路連線,那會寫這篇是想連同上一篇寫一個RESTFul API 讓手機得到想要的資料!
介紹
由於HttpURLConnection和HttpClient用法過於複雜, 如果沒有適當的封裝, 容易寫出重覆的程式碼,因此Google推出Volley Http request framework來處理簡單的HTTP Request, 另外也可以下載圖片, volley是屬於輕量級的HTTP Request處理工具, 因此對於大量數據處理, 例如下載文件, 效能就沒有那麼理想。
使用
gradle
compile 'com.mcxiaoke.volley:library:1.0.19'
權限(Permission)因為要使用網路連線
<uses-permission android:name="android.permission.INTERNET" />
程式碼(Code)
首先取得Volley 的 RequestQueue物件
RequestQueue mQueue = Volley.newRequestQueue(this);
RequestQueue是一個請求隊列對象,可以緩存所有的HTTP請求,然後按照一定的算法並發地發出這些請求。不必為每一次HTTP請求都創建一個RequestQueue對象,這是非常浪費資源的,基本上在每一個需要和網絡交互的Activity中創建一個RequestQueue對象就足夠了。建議將mQueue設為單一物件全域使用,避免浪費資源。
為了發出Http 請求,還需要StringRequest物件
StringRequest stringRequest = new StringRequest("http://192.168.0.13:8081/listUsers", new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d("volley",response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.d("volley",error.getMessage(), error); } });
StringRequest的函數需要傳入三個參數,第一個參數就是URL地址,第二個參數是服務器響應成功的callback,第三個參數是服務器響應失敗的callback。
**注意** http://192.168.0.13 為區網IP,每台電腦不一樣,可由CMD 打上 ipconfig 查看
**注意** http://192.168.0.13 為區網IP,每台電腦不一樣,可由CMD 打上 ipconfig 查看
最後,將這個StringRequest對象添加到RequestQueue裡面就可以了,如下所示:
mQueue.add(stringRequest);
手機的部分就差不多了,那我們來看"http://192.168.0.13:8081/listUsers"這支RESTFul API 如何寫
如果大家還沒裝Node.js 以及 express 可以看Node.js + Express 基本認識 in windows喔
這裡我要做簡單的網路連線跟server要資料(檔案裡的內容)
首先開啟記事本並記得改檔名(account.json),並打上以下json格式
重頭戲來了
接下來一樣打開記事本並記得改檔名(workserver.js),並打上以下程式碼
接下來就打開node.js cmd ,切換到檔案的位置並執行
這裡我要做簡單的網路連線跟server要資料(檔案裡的內容)
首先開啟記事本並記得改檔名(account.json),並打上以下json格式
[{"name":"andy","pass":"08160816"}]這份就是client跟server要資料回傳的內容
重頭戲來了
接下來一樣打開記事本並記得改檔名(workserver.js),並打上以下程式碼
var express = require('express');
var app = express();
var fs = require("fs");
//添加的新用户数据
var user = {
"name" : "yuyu",
"pass" : "password1"
}
app.get('/addUser', function (req, res) {
fs.readFile( __dirname + "/" + "account.json", 'utf8', function (err, data) {
data = JSON.parse(data.toString().trim());
data.push(user);
console.log( data );
fs.writeFile(__dirname + "/" + "account.json", JSON.stringify(data), 'utf8', function(err) {
if (err) throw err;
console.log('complete');
});
res.end( JSON.stringify(data));
});
})
app.get('/listUsers', function (req, res) {
fs.readFile( __dirname + "/" + "account.json", 'utf8', function (err, data) {
console.log( data );
res.end( data );
});
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("IP http://%s:%s", host, port)
})
有注意到 app.get('/listUsers'.....這段嗎?解釋為:當對localhost:8081/listUsers發出GET請求,Server回復account.json檔案內容接下來就打開node.js cmd ,切換到檔案的位置並執行
node workserver.js這裡以網頁顯示這支RESTFul API 的回傳結果
**注意**
若是想要在自己電腦並用手機測試,記得兩個裝置(電腦、手機)需是同網段(連到同個wifi),並用區網連線的方式就可以進行連線。若是自己有實體IP就沒這個問題!
以上就是簡單Server 與 Client 端 連線,寫出一個可以進行溝通的程式,若有什麼問題可以互相討論,之後有空會出一篇有關使用Volley來下載網路圖片!
Refrence:
http://blog.csdn.net/guolin_blog/article/details/17482095
https://bng86.gitbooks.io/android-third-party-/content/volley.html