网络获取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);
        }
});

 

posted @ 2016-04-02 18:35  LyJs  阅读(1537)  评论(0编辑  收藏  举报