一、APP POST 數據到服務器
首先 post 的數據應該包括識別這個花卉的信息和我們想要澆水的量,這裏我們識別花卉採用花卉的名字,這樣後臺程序通過花卉名來對應更新數據庫中該花的澆水量。
- mFlower_name:花卉名
- mBulk : 澆水量
實現代碼如下:
注意:
- String urlPath 中的 IP 地址是我局域網的地址,如果你的後臺程序是在雲服務器上運行的那麼應改成雲服務器的公網IP。不過可以先在局域網內實現嘛。
- http 的默認端口號爲80,但由於我用的是springboot框架打包成的jar包,自帶了嵌入的tomcat,而tomcat容器默認的端口號爲8080(可以在配置文件(.yml)中更改)。
- 服務端的代碼可參照專欄中的下一篇文章。
Code:
/*-- 將澆水量等信息上傳到服務器 安卓4.0以後必須在子線程中執行 --*/
new Thread() {
@Override
public void run() {
try {
String urlPath = "http://192.168.43.148:8080/appPost"; //URL
URL url = new URL(urlPath);
HttpURLConnection coon = (HttpURLConnection) url.openConnection();
coon.setRequestMethod("POST"); //請求方式爲POST
coon.setConnectTimeout(5000);
coon.setRequestProperty("Content-Type", "application/json"); //設置發送的數據爲 json 類型,會被添加到http body當中
String json = "{\"name\":\""+ mFlower_name+"\"," + "\"bulk\":" + "\"" +mBulk+ "\"}"; //將要發送的花卉數據字符串連接成json格式
coon.setRequestProperty("Content-Length", String.valueOf(json.length()));
//post請求把數據以流的方式寫給服務器,指定請求的輸出模式
coon.setDoOutput(true);
coon.getOutputStream().write(json.getBytes());
int code = coon.getResponseCode();
if (code == 200) {
System.out.println("請求成功");
} else {
System.out.println("請求失敗");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("請求失敗");
}
}
}.start();
二、APP 從服務器 GET 數據
APP 同樣需要從服務器獲得花卉的狀態信息來更新顯示界面,如更新到最新的土壤溼度、光照強度等顯示給用戶。
實現代碼如下:
注意:
- 從服務器得到的數據爲 list 形式,所以解析較複雜一些,這取決於你服務器返回什麼樣的數據,在下一篇文章會有說明。服務器直接返回 map 形式APP這邊會更好解析。具體百度啦!
Code:
new Thread() {
@Override
public void run() {
//查詢服務器 得到花卉的信息 更新顯示的數據
try {
String urlPath = "http://192.168.43.148:8080/appQuery?flower_name=" + mFlower_name;
URL url = new URL(urlPath);
HttpURLConnection coon = (HttpURLConnection) url.openConnection();
coon.setRequestMethod("GET");
coon.setConnectTimeout(5000);
int code = coon.getResponseCode();
if (code == 200) {
//1.得到輸入流
InputStream is = coon.getInputStream();
//2.將流用自己寫的StreamUtils轉化爲字符串 改字符串爲json格式
String flowerInfo = StreamUtils.readStream(is);
//3.解析json數據(這裏是list形式) 並顯示數據
JSONArray flowerJsonArray = new JSONArray(flowerInfo);
// 這裏的數組長度其實是1
for (int i = 0; i < flowerJsonArray.length(); i++) {
JSONObject flowerJsonObject = flowerJsonArray.getJSONObject(i);
mTv_temperature.setText(flowerJsonObject.getString("temperature"));//溫度
mTv_humidity.setText(flowerJsonObject.getString("humidity"));//溼度
mTv_co2.setText(flowerJsonObject.getString("co2"));//CO2 濃度
}
} else {
Message msg = Message.obtain();
msg.what = STATUS_ERROR;
mHandler.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
三、APP 界面部分
這部分就主要看自己如何去設計了,主要還是要多學習一些,才能做出更好看、功能更加豐富的APP。下面展示一下我做的APP(由於技術原因以及沒有藝術細胞,做的着實有些醜)。
四、相關疑問
- 後臺相關的代碼呢?
在下一節貼上我的服務端的代碼,其實站在SpringBoot的肩膀上,我們後臺的搭建顯得異常的容易。 - APP 的其他代碼和功能呢?
這裏我之列出了POST 和 GET 過程相關的代碼,如果真的要實現衆多功能,還是要花好長一段時間去學習安卓。
五、學習方法
- 我個人是通過學習完Java以後,在某寶花了幾十塊錢買的教學視頻,還有嗶哩嗶哩上的天哥在奔跑的視頻也還不錯,等等。這裏僅僅只是個人的學習過程,僅供參考。