网络获取json数据并解析
1、升级流程分析
2、Android通过URL获取网络资源
JSONObject来解析Json字符串
//创建URL对象
//本机地址用localhost, 但是如果用模拟器加载本机的地址时,可以用ip(10.0.2.2)来替换
URL url=new URL("http://10.0.2.2:8080/update.json");
//第一步是creat
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");//设置请求方法
conn.setConnectTimeout(5000);//设置连接超时
conn.setReadTimeout(5000);
conn.connect();// 连接服务器
int responseCode = conn.getResponseCode();// 获取响应码
if(responseCode==200){
InputStream inputStream=conn.getInputStream();
String result=StreamUtils.readFormStream(inputStream);
// 解析json
JSONObject jo=new JSONObject(result);
String versionName = jo.getString("versionName");
versionCode=jo.getInt("versionCode");
description=jo.getString("description");
String downloadUrl=jo.getString("downloadUrl");
if(versionCode>getVersionCode()){
msg.what=CODE_UPDATE_DIALOG;
}else{
msg.what = CODE_ENTER_HOME;
}
}
3、连接网络时候要在线程中,如果更新界面也要在线程中,所以要使用Handler和Message结合,使用Handle对象把Message发送出去,在Handle对界面进行更新。
Handler handler=new Handler(){
public void handleMessage(Message msg) {
switch(msg.what){
case CODE_UPDATE_DIALOG:
showUpdateDailog();
break;
case CODE_URL_ERROR:
Toast.makeText(SplashActivity.this, "网址错误", Toast.LENGTH_SHORT).show();
enterHome();
break;
case CODE_ENTER_HOME:
enterHome();
break;
case CODE_NET_ERROR:
Toast.makeText(SplashActivity.this, "没有网络", Toast.LENGTH_SHORT).show();
enterHome();
break;
case CODE_JSON_ERROR:
Toast.makeText(SplashActivity.this, "JSON解析错误", Toast.LENGTH_SHORT).show();
enterHome();
break;
}
};
};
4、使用xUtils组件进行大文件的上传下载。
HttpUtils http = new HttpUtils();
HttpHandler handler = http.download("http://apache.dataguru.cn/httpcomponents/httpclient/source/httpcomponents-client-4.2.5-src.zip",
"/sdcard/httpcomponents-client-4.2.5-src.zip",
true, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。
true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。
new RequestCallBack<File>() {
@Override
public void onStart() {
testTextView.setText("conn...");
}
@Override
public void onLoading(long total, long current, boolean isUploading) {
testTextView.setText(current + "/" + total);
}
@Override
public void onSuccess(ResponseInfo<File> responseInfo) {
testTextView.setText("downloaded:" + responseInfo.result.getPath());
}
@Override
public void onFailure(HttpException error, String msg) {
testTextView.setText(msg);
}
});