zoukankan      html  css  js  c++  java
  • Android中的网络编程

    谷歌在Android6.0之后就废弃了使用HttpClinet进行网络连接。所以,这里需要重点学习的是通过HttpUrlConnect进行网络连接。

        String path="这里是你想要的连接";
            URL url=new URL(path);
            HttpURLConnection huc=(HttpURLConnection)url.openConnection();
            huc.setConnectTimeout(3000);
            huc.setReadTimeout(3000);
    //请求方式,Get或者Post; huc.setRequestMethod(
    "Get"); //IO流操作 if(huc.getResponseCode()==200){ InputStream is=huc.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is)); StringBuffer sb=new StringBuffer(); String line; while((line=br.readLine())!=null){ sb.append(line); } sb.toString(); }

    通常情况下,需要判断网络是否连接:

     public Boolean isNet(Context context){
           //通过上下文拿到系统的连接服务,返回一个ConnectivityManager对象
           ConnectivityManager cm=(ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
    //通过这个对象再拿到连接管理器。 NetworkInfo nwi
    = cm.getActiveNetworkInfo();
    //判断是否有网
    if(nwi!=null){ return nwi.isAvailable(); }else{ return false; } }

    之后就是如果从网络解析数据:

    Json解析:

    谷歌官方的Gson解析数据:

    首先写一个DataBean,用来获取Gson解析的数据,这里要特别注意解析的顺序,和对象名一定要和Json一样的格式:

    {
    
        "result": {
            "realtime": {
                "wind": {
                    "windspeed": "0.0",
                    "direct": "西南风",
                    "power": "1级",
                    "offset": null
                },
                "time": "20:00:00",
                "weather": {
                    "humidity": "35",
                    "img": "1",
                    "info": "多云",
                    "temperature": "30"
                },
                "dataUptime": "1467463816",
                "date": "2016-07-02",
                "city_code": "101270101",
                "city_name": "成都",
                "week": "6",
                "moon": "五月廿八"
            },
            "life": {
                "date": "2016-7-2",
                "info": {
                    "kongtiao": [
                        "部分时间开启",
                        "天气热,到中午的时候您将会感到有点热,因此建议在午后较热时开启制冷空调。"
                    ],
                    "yundong": [
                        "较适宜",
                        "天气较好,户外运动请注意防晒,推荐您在室内进行低强度运动。"
                    ],
                    "ziwaixian": [
                        "中等",
                        "属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。"
                    ],
                    "ganmao": [
                        "少发",
                        "各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。"
                    ],
                    "xiche": [
                        "不宜",
                        "不宜洗车,未来24小时内有雨,如果在此期间洗车,雨水和路上的泥水可能会再次弄脏您的爱车。"
                    ],
                    "wuran": [
                        "较差",
                        "气象条件较不利于空气污染物稀释、扩散和清除,请适当减少室外活动时间。"
                    ],
                    "chuanyi": [
                        "炎热",
                        "天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。"
                    ]
                }
            },
            "weather": [
                {
                    "date": "2016-07-02",
                    "week": "六",
                    "nongli": "五月廿八",
                    "info": {
                        "dawn": null,
                        "day": [
                            "1",
                            "多云",
                            "33",
                            "南风",
                            "微风",
                            "06:05"
                        ],
                        "night": [
                            "7",
                            "小雨",
                            "22",
                            "南风",
                            "微风",
                            "20:10"
                        ]
                    }
                },
                {
                    "date": "2016-07-03",
                    "week": "日",
                    "nongli": "五月廿九",
                    "info": {
                        "dawn": [
                            "7",
                            "小雨",
                            "22",
                            "南风",
                            "微风",
                            "20:10"
                        ],
                        "day": [
                            "1",
                            "多云",
                            "31",
                            "南风",
                            "微风",
                            "06:05"
                        ],
                        "night": [
                            "1",
                            "多云",
                            "22",
                            "无持续风向",
                            "微风",
                            "20:10"
                        ]
                    }
                },
                {
                    "date": "2016-07-04",
                    "week": "一",
                    "nongli": "六月初一",
                    "info": {
                        "dawn": [
                            "1",
                            "多云",
                            "22",
                            "无持续风向",
                            "微风",
                            "20:10"
                        ],
                        "day": [
                            "2",
                            "阴",
                            "31",
                            "无持续风向",
                            "微风",
                            "06:05"
                        ],
                        "night": [
                            "3",
                            "阵雨",
                            "23",
                            "北风",
                            "微风",
                            "20:10"
                        ]
                    }
                },
                {
                    "date": "2016-07-05",
                    "week": "二",
                    "nongli": "六月初二",
                    "info": {
                        "dawn": [
                            "3",
                            "阵雨",
                            "23",
                            "北风",
                            "微风",
                            "20:10"
                        ],
                        "day": [
                            "1",
                            "多云",
                            "28",
                            "南风",
                            "微风",
                            "06:06"
                        ],
                        "night": [
                            "7",
                            "小雨",
                            "23",
                            "北风",
                            "微风",
                            "20:10"
                        ]
                    }
                },
                {
                    "date": "2016-07-06",
                    "week": "三",
                    "nongli": "六月初三",
                    "info": {
                        "dawn": [
                            "7",
                            "小雨",
                            "23",
                            "北风",
                            "微风",
                            "20:10"
                        ],
                        "day": [
                            "8",
                            "中雨",
                            "29",
                            "北风",
                            "微风",
                            "06:06"
                        ],
                        "night": [
                            "8",
                            "中雨",
                            "21",
                            "北风",
                            "微风",
                            "20:10"
                        ]
                    }
                },
                {
                    "date": "2016-07-07",
                    "week": "四",
                    "nongli": "六月初四",
                    "info": {
                        "dawn": null,
                        "day": [
                            "3",
                            "阵雨",
                            "27",
                            "东北风",
                            "微风",
                            "07:30"
                        ],
                        "night": [
                            "3",
                            "阵雨",
                            "22",
                            "东北风",
                            "微风",
                            "19:30"
                        ]
                    }
                },
                {
                    "date": "2016-07-08",
                    "week": "五",
                    "nongli": "六月初五",
                    "info": {
                        "dawn": null,
                        "day": [
                            "3",
                            "阵雨",
                            "27",
                            "东北风",
                            "微风",
                            "07:30"
                        ],
                        "night": [
                            "3",
                            "阵雨",
                            "22",
                            "东北风",
                            "微风",
                            "19:30"
                        ]
                    }
                }
            ],
            "pm25": {
                "key": "",
                "show_desc": "0",
                "pm25": {
                    "curPm": "54",
                    "pm25": "34",
                    "pm10": "54",
                    "level": "2",
                    "quality": "良",
                    "des": "今天的空气质量是可以接受的,除少数异常敏感体质的人群外,大家可在户外正常活动。"
                },
                "dateTime": "2016年07月02日20时",
                "cityName": "成都"
            },
            "isForeign": 0
        },
        "error_code": 0,
        "reason": "Succes"
    
    }
    

     DataBean:

    package com.zhuoxin.bean;
    
    import java.io.Serializable;
    import java.util.List;
    
    
    public class WeatherDataBean implements Serializable{
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
    
        public String reason;//返回请求成功,或者是失败的原因
        
        public Reslut result;
        public static class Reslut implements Serializable{
            public Realtime realtime;
            public static class Realtime implements Serializable{
                public String date;//当天的日期
                public String time;//更新的时间
                public String city_name;//当前的城市名称
                public String week;//星期几
                public String moon;//农历日期
                
                public Wind wind;
                public static class Wind implements Serializable{
                    public String direct;//风向
                    public String power;//风力
                }
                
                public Weather weather;
                public static class Weather implements Serializable{
                    public String info; //天气情况
                    public String temperature;//当前的温度
                }
            }
            public Life life;//生活指数
            public static class Life implements Serializable{
                public Info info;//生活指数的info
                public static class Info implements Serializable{
                    List<String> kongtiao;
                    List<String> yundong;
                    List<String> ziwaixian;
                    List<String> ganmao;
                    List<String> xiche;
                    List<String> wuran;
                    List<String> chuanyi;
                }
            }
            
            List<FutureWeather> weather;//未来几天的天气数组的key
            public static class FutureWeather implements Serializable{
                public String date;//未来几天天气的日期
                public String week;//未来几天天气的星期几
                public String nongli;//未来几天天气的农历日期
                public Info info;//未来几天天气的info
                public static class Info implements Serializable{
                    List<String> day; //白天的天气信息
                    List<String> night;//晚上的天气信息
                }
            }
            public Pm25 pm25;
            public static class Pm25 implements Serializable{
                public Pm250 pm25;
                public static class Pm250 implements Serializable{
                    public String curPm;//当前pm2.5的值
                    public String quality;//空气情况
                    public String des; // 提示
                }
            }
        }
    }

    之后的事就非常简单了:

     public <WeatherDataBean> parsejson(String json){
           Gson gs=new Gson();
    传两个参数:一个是Json连接,一个是DataBean的类。 return gs.fromJson(json, WeatherDataBean.
    class); }

    XML解析这里讲谷歌的PULL解析XML,XML解析同样的要写一个DataBean用来存放解析出来要解析的数据:

    XML:

    <feed xmlns="http://www.w3.org/2005/Atom">
    <title type="text">博客园_48小时阅读排行</title>
    <id>uuid:f59e7376-bd59-4244-91c8-c1d8a91207db;id=42519</id>
    <updated>2016-07-02T13:14:13Z</updated>
    <entry>
    <id>5631573</id>
    <title type="text">通过几个Hello World感受.NET Core全新的开发体验</title>
    <summary type="text">
    2016年6月27日,这是一个特殊的日子,微软全新的.NET开发平台.NET Core的RTM版本正式发布。我个人将.NET Core的核心特性归结为三点,它们的首字母组成一个非常好记的简称——COM,分别代表的含义Cross-Platform、Open-Source和Modularization。...
    </summary>
    <published>2016-06-30T23:19:00+08:00</published>
    <updated>2016-07-02T13:14:13Z</updated>
    <author>
    <name>Artech</name>
    <uri>http://www.cnblogs.com/artech/</uri>
    <avatar>http://pic.cnblogs.com/face/u19327.jpg</avatar>
    </author>
    <link rel="alternate" href="http://www.cnblogs.com/artech/p/net-core-hello-world.html"/>
    <diggs>59</diggs>
    <views>5023</views>
    <comments>58</comments>
    </entry>
    </feed>
    

     Bean文件,同个生成get和set存取数据:

    package com.yakir.databean;
    
    import android.graphics.Bitmap;
    
    /**
     * Created by qbqw7 on 2016/6/26.
     */
    public class MainBolgData {
        private String id;
        private String title;
        private String summary;
        private String published;
        private String updated;
        private String name;
        private String uri;
        private Bitmap avatar;
        private String link;
        private String diggs;
        private String views;
        private String comments;
        private Bitmap topicIcon;
        private String sourceName;
        private String posts;
        private String comment;
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        public String getSummary() {
            return summary;
        }
    
        public void setSummary(String summary) {
            this.summary = summary;
        }
    
        public String getPublished() {
            return published;
        }
    
        public void setPublished(String published) {
            this.published = published;
        }
    
        public String getUpdated() {
            return updated;
        }
    
        public void setUpdated(String updated) {
            this.updated = updated;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getUri() {
            return uri;
        }
    
        public void setUri(String uri) {
            this.uri = uri;
        }
    
        public Bitmap getAvatar() {
            return avatar;
        }
    
        public void setAvatar(Bitmap avatar) {
            this.avatar = avatar;
        }
    
        public String getLink() {
            return link;
        }
    
        public void setLink(String link) {
            this.link = link;
        }
    
        public String getDiggs() {
            return diggs;
        }
    
        public void setDiggs(String diggs) {
            this.diggs = diggs;
        }
    
        public String getViews() {
            return views;
        }
    
        public void setViews(String views) {
            this.views = views;
        }
    
        public String getComments() {
            return comments;
        }
    
        public void setComments(String comments) {
            this.comments = comments;
        }
    
        public Bitmap getTopicIcon() {
            return topicIcon;
        }
    
        public void setTopicIcon(Bitmap topicIcon) {
            this.topicIcon = topicIcon;
        }
    
        public String getSourceName() {
            return sourceName;
        }
    
        public void setSourceName(String sourceName) {
            this.sourceName = sourceName;
        }
    
        public String getPosts() {
            return posts;
        }
    
        public void setPosts(String posts) {
            this.posts = posts;
        }
    
        public String getComment() {
            return comment;
        }
    
        public void setComment(String comment) {
            this.comment = comment;
        }
    }
    

     PULL解析:

    public List<Data> parseXml(InputStream is) {
          try {
    // 建一个解析工厂 XmlPullParserFactory xpf
    =XmlPullParserFactory.newInstance();
    //拿到解析器 XmlPullParser parser
    =xpf.newPullParser();
    //给解析器装填原料 parser.setInput(is,
    "UTF-8"); //拿到解析的时间类型 int evenType=parser.getEventType();
    //开始解析,做循环判断,如果不是xml文档末就一直解析
    while (evenType!=XmlPullParser.END_DOCUMENT) { String tagaName=parser.getName(); switch (evenType) {
    //开始解析xml的时候创建一个list容器存储对象,将data初始化。
    case XmlPullParser.START_DOCUMENT: list=new ArrayList<Data>(); data=new Data(); break;
    //解析标签,从标签头开始
    case XmlPullParser.START_TAG:
    //如果标签匹配了"entry"这个字符串就解析
    if (tagaName.equals("entry")) { //如果标签匹配了"title"这个字符串就将这个标签后面的字符串取出来 }else if (tagaName.equals("title")) { data.setTitle(parser.nextText()); }else if (tagaName.equals("summary")) { data.setSummary(parser.nextText()); }else if (tagaName.equals("name")) { data.setName(parser.nextText()); }else if (tagaName.equals("updated")) { data.setUpdated(parser.nextText()); } if (tagaName.equals("comments")) {
    //当判断到是末尾字符串标签的时候就把这个对象撞到list中 data.setComments(parser.nextText()); list.add(data); }
    break; case XmlPullParser.END_TAG: break; }
    //如果数据多条,当取完了就应该跳到下一个事件类型。

    eventType = parser.next();
    
    

    最后来一波吉祥物:

        //┏┓   ┏┓  
        //┏┛┻━━━┛┻┓  
        //┃       ┃    
        //┃   ━   ┃  
        //┃ ┳┛ ┗┳ ┃  
        //┃       ┃  
        //┃   ┻   ┃  
        //┃       ┃  
        //┗━┓   ┏━┛  
        //  ┃   ┃   神兽保佑          
        //  ┃   ┃   代码无BUG!  
        //  ┃   ┗━━━┓  
        //  ┃       ┣┓  
        //  ┃       ┏┛  
        //  ┗┓┓┏━┳┓┏┛  
        //    ┃┫┫ ┃┫┫  
        //    ┗┻┛ ┗┻┛  
  • 相关阅读:
    Linux磁盘空间被未知资源耗尽
    磁盘的分区、格式化、挂载(转)
    sp_MSforeachtable和sp_MSforeachdb
    分布式缓存系统 Memcached 【转载】
    在性能计数的时候使用StopWatch类型
    数据库设计阶段中为何要考虑“反规范化”
    再谈谈数据库镜像之客户端重定向
    当SQL Server排序时遇上了NULL值
    ArrayList的动态扩展
    SSMS 2008的智能感知仅仅针对SQL Server 2008的数据库有效
  • 原文地址:https://www.cnblogs.com/lovelyYakir/p/5636083.html
Copyright © 2011-2022 走看看