Android 手機衛士(5)從Apache Tomcat伺服器獲取資料並解析
阿新 • • 發佈:2019-02-17
我們從伺服器端獲取“資訊”以便於CheckVersionCode,從而服務於版本更新操作!
// 介紹一下流程:
// 獲取伺服器端的版本號(兩步:請求/響應[xml | json])
// Tips : 訪問http://www.oxxx.com/xxx.josn?key=value 返回200 請求成功.
// 以流的方式將響應資料[json檔案裡面的內容]讀取出來
// 提示更新的json檔案應該包含的資料如下:
/*
* 新版本的版本名稱/新版本的描述資訊/ 服務端的版本號 /新版本apk的下載地址
*/
// Test:模仿更新【在伺服器端存放一個update.json】
/* (1)update.json */
// {
// versionName:"2.0",
// versionDes:"2.0相當的酷炫,快來下載吧",
// versionCode:"2",
// downloadUrl:"http://www.oxxx.com/xxx.apk"
// }
/* (2)寫好後可以用hiJson工具進行驗證是否寫的正確 */
/* (3)update.json放在apache tomcat伺服器上 */
// 具體實現:update.json放於C:\ApacheTomcat\Tomcat 9.0\webapps\ROOT下
/* (4)訪問http://localhost:8080/update.json */
// 若是提示下載或者正確顯示出json資料,則josn檔案置於伺服器成功
這裡把Apache Tomcat的各種連結置於此,也便於以後檢視。
json檔案存在必要性:
因為我們要模擬下載,伺服器端肯定要維護一個版本資訊的json檔案。
上面的流程也介紹了該json檔案中應該包含的內容。
寫好的Json檔案放在哪裡呢?
Tomcat 9.0\webapps\ROOT下面
怎麼驗證正確與否?
http://localhost:8080/update.json【這裡的localhost可以是你的ip地址,當然這是你tomcat安裝好之後才有的操作】
若是提示下載或者正確顯示出json資料,則josn檔案置於伺服器成功。
【進入正題】
伺服器端會響應給我們的json的URL地址已知!
下面直接貼上請求伺服器端資料的程式碼:
// (1)封裝url地址
URL url = new URL("http://192.168.31.101:8080/update.json");
// (2)開啟一個連結
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
// (3)設定常見的請求引數(請求頭)
// (3-1)請求超時(沒連上)
urlConnection.setConnectTimeout(2000);
// (3-2)讀取超時(連上了,連得時間超過了2s)
urlConnection.setReadTimeout(2000);
// (3-3)預設請求方式是"GET",否則"POST"(必須要寫清楚,大寫)
// urlConnection.setRequestMethod("POST");
// (4)獲取請求成功的相應碼
if (urlConnection.getResponseCode() == 200) {
// (5)以流的形式將資料獲取下來
InputStream iStream = urlConnection.getInputStream();
// (6)將流轉換成字串(StreamUtil工具類封裝),之後才可以解析
String json = StreamUtil.stream2String(iStream);
Log.d(tag, json);
// (7)json資料的解析
JSONObject jsonObject = new JSONObject(json);
mVersionName = jsonObject.getString("versionName");
mVersionDes = jsonObject.getString("versionDes");
mVersionCode = jsonObject.getString("versionCode");
mdownloadUrl = jsonObject.getString("downloadUrl");
Log.d(tag, mVersionName);
Log.d(tag, mVersionDes);
Log.d(tag, mVersionCode );
Log.d(tag, mdownloadUrl);
// (8)比對版本號(若是本地版本號小於伺服器版本號,則提示更新)
.........
因為訪問伺服器需要網路,務必新增網路許可權喲~
<uses-permission android:name="android.permission.INTERNET" />
解析json資料只能解析string型的值,因此從伺服器獲取的流得先轉換為String資料.
public static String stream2String(InputStream iStream) {
// (1)可直接從流轉換為string的一種
ByteArrayOutputStream oStream = new ByteArrayOutputStream();
// (2)定義一次性讀取(buffer)的大小
byte[] buffer = new byte[1024];
// (3)temp記錄讀取的個數
// (4)while迴圈知道讀取完畢
int temp = -1;
try {
while ((temp = iStream.read(buffer)) != -1) {
oStream.write(buffer, 0, temp);
}
// (5)toString()
return oStream.toString();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.d(tag, "iStream.read(buffer) 異常");
e.printStackTrace();
} finally {
try {
// (6)Close Stream
iStream.close();
oStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.d(tag, "oStream/iStream.close() 異常");
e.printStackTrace();
}
}
return null;
}
這樣就輕鬆的將伺服器端的json資料完美的解析出來了,版本號什麼的一目瞭然~