Android 手机卫士(5)从Apache Tomcat服务器获取数据并解析

来源:互联网 发布:合战 知乎 编辑:程序博客网 时间:2024/06/08 13:31

我们从服务器端获取信息”以便于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数据完美的解析出来了,版本号什么的一目了然~

阅读全文
1 0
原创粉丝点击