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