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的各种链接置于此,也便于以后查看。

(1)它是什么?
https://baike.baidu.com/item/apache%20tomcat/5039313?fr=aladdin
(2)官网下载地址
http://tomcat.apache.org/download-90.cgi
(3)如何安装配置
https://www.wshunli.com/2016/03/19/Tomcat%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE/

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数据完美的解析出来了,版本号什么的一目了然~

你可能感兴趣的:(android,Android-手机卫士)