谷歌在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!
// ┃   ┗━━━┓
// ┃       ┣┓
// ┃       ┏┛
// ┗┓┓┏━┳┓┏┛
// ┃┫┫ ┃┫┫
// ┗┻┛ ┗┻┛

Android中的网络编程的更多相关文章

  1. Android之Http网络编程(一)

    Android应用作为一个客户端程序绝大部分都是需要进行网络请求和访问的,而http通信是一种比较常见并常用的通信方式. 在Android中http网络编程中有两种实现方式,一种是使用HttpURLC ...

  2. Android之Http网络编程(三)

    在前面两篇博客<Android之Http网络编程(一)>.<Android之Http网络编程(二)>中,简单的介绍了对网页的请求和客户端与服务端的简单的参数交互.那么,这一篇博 ...

  3. 网游中的网络编程系列1:UDP vs. TCP

    原文:UDP vs. TCP,作者是Glenn Fiedler,专注于游戏网络编程相关工作多年. 目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网 ...

  4. 网游中的网络编程3:在UDP上建立虚拟连接

    目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网络编程3:在UDP上建立虚拟连接 TODO 二.在UDP上建立虚拟连接 介绍 UDP是无连接的,一 ...

  5. 第84节:Java中的网络编程(中)

    第84节:Java中的网络编程(中) 实现客户端和服务端的通信: 客户端需要的操作,创建socket,明确地址和端口,进行键盘录入,获取需要的数据,然后将录入的数据发送给服务端,为socket输出流, ...

  6. 第78节:Java中的网络编程(上)

    第78节:Java中的网络编程(上) 前言 网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通信的网络细节. 网络编程 OSI开放系统互连 网络编程指IO加网络 TCP/IP模型: ...

  7. 第62节:探索Java中的网络编程技术

    前言 感谢! 承蒙关照~ 探索Java中的网络编程技术 网络编程就是io技术和网络技术的结合,网络模型的定义,只要共用网络模型就可以两者连接.网络模型参考. 一座塔有七层,我们需要闯关. 第一层物理层 ...

  8. Android中判断网络连接是否可用及监控网络状态

    Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android ...

  9. Java中的网络编程

    ​ Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端 ...

随机推荐

  1. 在linux安装redis单机和集群后,如何在windows上使用redis客户端或者java代码访问错误的原因很简单,就是没有连接上redis服务,由于redis采用的安全策略,默认会只准许本地访问。需要通过简单配置,完成允许外网访问。

    这几天在学习在linux上搭建服务器的工作,可谓历经艰辛.可喜最后收获也不少. 这次是在linux上搭建redis服务器后从windows上缺无法访问,连接不上. 仔细回忆以前搭建nginx和ftp的 ...

  2. WPF自适应可关闭的TabControl 类似浏览器的标签页(转)

    效果如图: 虽然说是自适应可关闭的TabControl,但TabControl并不需要改动,不如叫自适应可关闭的TabItem. 大体思路:建一个用户控件,继承自TabItem,里面放个按钮,点击的时 ...

  3. 如何使用 nslookup 查域名的 ttl

    如何使用 nslookup 查域名的 ttl nslookup 经常用,但是最近才使用到查 ttl 的信息. 域名的 ttl 也是网站优化的一个重要参数. nslookup -d www.fastad ...

  4. 使用 Excel 可以很方便的做程序原型

    使用 Excel 可以很方便的做程序原型 比如计算 单片机的端口模式,可以使用 Excel 很方便的计算出来,花了 15 分钟做好. 还可以使用函数自动根据二进制计算出 十六进制. 然后如果再使用软件 ...

  5. webpack 使用 extract-text-webpack-plugin 报错 Tapable.plugin is deprecated. Use new API on .hooks instead

    webpack 使用 extract-text-webpack-plugin 报错 Tapable.plugin is deprecated. Use new API on .hooks instea ...

  6. angular中的ng-bind-html和$sce服务

    输入的内容存储在数据库中,然后再在数据库中将这些数据读写到页面上,比如你使用了某个第三方的脚本或者库.加载了一段html等等,可能会多了一些css的样式(显示在界面上) 这个时候我们可以利用angul ...

  7. Cannot read property 'setState' of undefined

    You're using function() in your Promise chain, this will change the scope for this. If you're using ...

  8. 关于Markdown的空行

    如何在Markdown中输入一个空行? 最简单的做法是加一个<br>(html)或者<br />(xhtml),因为Markdown完全兼容html语法,但有的编辑器会支持,譬 ...

  9. DBUtils 增删改查例子

    sql CREATE TABLE [dbo].[Person] ( , ) NOT NULL , ) COLLATE Chinese_PRC_CI_AS NULL , [age] [int] NULL ...

  10. Unit02: JSON 、 使用JSON实现数据交换 、 jQuery对AJAX的支持,编码问题

    Unit02: JSON . 使用JSON实现数据交换 . jQuery对AJAX的支持 1. 编码问题 (1)发送get请求 为什么会产生乱码? ie浏览器提供的ajax对象,对中文会使用gbk来编 ...