获取网络资源
- 因为获取,网络资源,是耗时操作,故此,需要线程来执行。推荐使用,new AsyncTask(异步任务类),或者 new Thread如果需要刷新UI的话还要,增加Handler。
获取,网络资源的步骤
- 定义,资源的网址
- 建立URI 对象,加载资源
- 从URI对象中,取到资源连接
- 设置,请求的方式
- 设置,请求超时
- 通过字节输入流,读取文件
代码
//被 解析的,文件网络路径
String UriPath="http://172.20.10.3:8080/testPullParser.xml";
//定义 uri
URL uri= null;
try {
uri = new URL(UriPath);
//得到网络连接
HttpURLConnection httpURLConnection= (HttpURLConnection) uri.openConnection();
//设置,网络请求方式
httpURLConnection.setRequestMethod("GET");
//设置,请求超时(一旦超过这个时间点,就结束,请求),的时间 单位毫秒
httpURLConnection.setConnectTimeout(6000);
//通过,字节输入流读取,文件
InputStream URlInput=httpURLConnection.getInputStream();
BufferedInputStream bufferedInputStream=new BufferedInputStream(URlInput);
byte[] bytes = new byte[1024];
int len=0;
StringBuffer stringBuffer=new StringBuffer();
while((len=bufferedInputStream.read(bytes))!=-1){
String news=new String(bytes,0,len);
stringBuffer.append(news);
}
Log.i("test",stringBuffer.toString());
PullParser
方法 | 作用 |
---|---|
Xml.newPullParser() | 建立,xmlPullParser 解析对象 |
pullParser对象.setInput(网络资源,读取的字节输出流对象,”UTF-8”); | 设置,解析的数据源,以及解析的编码 |
pullParser对象.getEventType(); | 节点类型编号,返回的是整型 |
XmlPullParser.END_DOCUMENT | 取,结束节点的编号 |
XmlPullParser.START_TAG | 取,开始标签的编号 |
XmlPullParser.END_TAG | 取,结束标签的编号 |
pullParser.getAttributeValue(0) | 取,标签内的第一个(从零开始,第二个就是1,)属性。 |
pullParser.getAttributeName(0) | 取第一个属性的名字 |
pullParser.nextText() | 取,标签内的值 |
使用PullParser解析,网络xml(接上面的,网路资源)
//建立,xmlPullParser 解析对象
XmlPullParser pullParser=Xml.newPullParser();
try {
//设置,解析的数据源,以及解析的编码
pullParser.setInput(URlInput,"UTF-8");
//取到第一行,节点类型
int typeCount=pullParser.getEventType();
String pullXmlName=null;
//当前节点编号,不等于最后一个节点时
while (typeCount!=XmlPullParser.END_DOCUMENT){
pullXmlName=pullParser.getName(); //取到,每一个标签的名字
switch (typeCount){
case XmlPullParser.START_TAG: //当是 开始标签时
//如果,是根标签 我的xml根标签是Test
if("Test".equals(pullXmlName)){
Log.i("test","<"+pullXmlName+">");
}else if("Stu".equals(pullXmlName)){//当是,子标签时
//pullParser.getAttributeValue(0) 取,当前这个,标签的第一个(从零开始,第二个就是1,),属性
//pullParser.getAttributeName(0) 取第一个属性的名字
Log.i("test","<"+""+pullXmlName+" "+""+pullParser.getAttributeName(0)+"=”"+pullParser.getAttributeValue(0)+"“>");
}else if("id".equals(pullXmlName)){
//pullParser.nextText(); 取下个标签内的值
Log.i("test","<"+pullXmlName+"> "+pullParser.nextText()+"</"+pullXmlName+"> ");
}
break;
case XmlPullParser.END_TAG: //是 结束标签时
//如果,是根标签 我的xml根标签是Test
if("Test".equals(pullXmlName)){
Log.i("test","</"+pullXmlName+">");
}else if("Stu".equals(pullXmlName)){//当是,子标签时
Log.i("test","</"+pullXmlName+">");
}else if("id".equals(pullXmlName)){ //当时,子标签内的标签时
Log.i("test","</"+pullXmlName+">");
}
break;
}
//取到,xml文件中的,下一行
typeCount=pullParser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}