1. 程式人生 > >Android 手機衛士(5)從Apache Tomcat伺服器獲取資料並解析

Android 手機衛士(5)從Apache Tomcat伺服器獲取資料並解析

我們從伺服器端獲取資訊”以便於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資料完美的解析出來了,版本號什麼的一目瞭然~