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!
// ┃ ┗━━━┓
// ┃ ┣┓
// ┃ ┏┛
// ┗┓┓┏━┳┓┏┛
// ┃┫┫ ┃┫┫
// ┗┻┛ ┗┻┛
Android中的网络编程的更多相关文章
- Android之Http网络编程(一)
Android应用作为一个客户端程序绝大部分都是需要进行网络请求和访问的,而http通信是一种比较常见并常用的通信方式. 在Android中http网络编程中有两种实现方式,一种是使用HttpURLC ...
- Android之Http网络编程(三)
在前面两篇博客<Android之Http网络编程(一)>.<Android之Http网络编程(二)>中,简单的介绍了对网页的请求和客户端与服务端的简单的参数交互.那么,这一篇博 ...
- 网游中的网络编程系列1:UDP vs. TCP
原文:UDP vs. TCP,作者是Glenn Fiedler,专注于游戏网络编程相关工作多年. 目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网 ...
- 网游中的网络编程3:在UDP上建立虚拟连接
目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网络编程3:在UDP上建立虚拟连接 TODO 二.在UDP上建立虚拟连接 介绍 UDP是无连接的,一 ...
- 第84节:Java中的网络编程(中)
第84节:Java中的网络编程(中) 实现客户端和服务端的通信: 客户端需要的操作,创建socket,明确地址和端口,进行键盘录入,获取需要的数据,然后将录入的数据发送给服务端,为socket输出流, ...
- 第78节:Java中的网络编程(上)
第78节:Java中的网络编程(上) 前言 网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通信的网络细节. 网络编程 OSI开放系统互连 网络编程指IO加网络 TCP/IP模型: ...
- 第62节:探索Java中的网络编程技术
前言 感谢! 承蒙关照~ 探索Java中的网络编程技术 网络编程就是io技术和网络技术的结合,网络模型的定义,只要共用网络模型就可以两者连接.网络模型参考. 一座塔有七层,我们需要闯关. 第一层物理层 ...
- Android中判断网络连接是否可用及监控网络状态
Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android ...
- Java中的网络编程
Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端 ...
随机推荐
- oracle之 12.1.0.1.0 C 在 linux 7 上安装报错处理
环境说明:-- os[root@host-172-16-3-132 ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) - ...
- Charles 协助解决 metaweblog 排序问题
Charles 是 http代理抓包工具,可有效用于手机客户端网络抓包,详见Charles安装说明.这里使用使用Charles的请求转发功能调试metaweblog的最近博文排序功能. 由于OpenL ...
- 部署docker
部署和开发环境不一样,我们不需要频繁地进入到容器内部,所以一般我们会将代码和环境打包到一块,部署到服务器上 Clone 代码 将项目代码克隆到本地 git clone git@git.coding.n ...
- Range(转)
原文链接:http://www.cnblogs.com/peida/p/Guava_Range.html 在Guava中新增了一个新的类型Range,从名字就可以了解到,这个是和区间有关的数据结构.从 ...
- cpp分解质因数
原理有点像埃氏筛. #include <stdio.h> #include <iostream> #include <stdlib.h> using namespa ...
- 安卓5.0宣告了ARM平台全面进入64位时代
安卓5.0宣告了ARM平台全面进入64位时代 2014年10月份,安卓5.0正式版发布了,安卓5.0支持64位CPU,安卓5.0全面启用ART运行模式,在程序安装的时候,进行预编译,新的运行环境能够使 ...
- Java-Runoob:Java Number & Math 类
ylbtech-Java-Runoob:Java Number & Math 类 1.返回顶部 1. Java Number & Math 类 一般地,当需要使用数字的时候,我们通常使 ...
- WebStorm ES6 语法支持设置
ECMAScript 6是JavaScript语言的下一代标准,已经在2015年6月正式发布了.Mozilla公司将在这个标准的基础上,推出JavaScript 2.0.ES6的目标,是使得JavaS ...
- 【BZOJ】1001: [BeiJing2006]狼抓兔子(最小割 / 对偶图)
题目 传送门:QWQ 分析 显然答案是最小割. 然后dinic卡一卡过去了. 其实是懒得写转对偶图:正解 (dinic原来写的是vector,后来改的比较鬼畜 代码 #include <bits ...
- 如何将字符串去重复demo工具
//方法一:使用集合的indexOf方法 public static void one(){ String string="aaaaaakkkkkkmnf";//需去重复的字符串s ...