80,490
社区成员
发帖
与我相关
我的任务
分享package com.example.pullxml;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.xmlpull.v1.XmlPullParser;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener {
private Button request;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
request=(Button) findViewById(R.id.send_request);
request.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId()==R.id.send_request){
this.sendRequestWithHttpURLConnection();
}
}
private void sendRequestWithHttpURLConnection(){
//开启线程发起网络请求
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
//实例化
HttpURLConnection connection=null;
try {
URL url=new URL("http://10.0.2.2/get_data.xml");
connection=(HttpURLConnection) url.openConnection();//获取开放连接的实例
connection.connect();// 进行连接,但是实际上get request要在下一句的 connection.getInputStream()函数中才会真正发到
// 服务器
connection.setRequestMethod("GET");
connection.setConnectTimeout(8000);//设置连接超时
connection.setReadTimeout(8000);//设置读取超时
//发送http GET请求,获取相应码
InputStream in = connection.getInputStream();
Log.v("tag", "ok");
//使用pull解析器,解析这个流
parseXMLWithPull(in);
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
if(connection !=null){
connection.disconnect();//关闭连接
}
}
}
}).start();
}
private void parseXMLWithPull(InputStream in) {
XmlPullParser xmlPullParser = Xml.newPullParser();
try {
xmlPullParser.setInput(in,"utf-8");
//对节点的事件类型进行判断,就可以知道当前节点是什么节点
int eventType = xmlPullParser.getEventType();
String id = "";
String name = "";
String version = "";
while (eventType != XmlPullParser.END_DOCUMENT) {
String nodeName = xmlPullParser.getName();
switch (eventType) {
// 开始解析某个结点
case XmlPullParser.START_TAG: {
if ("id".equals(nodeName)) {
id = xmlPullParser.nextText();
} else if ("name".equals(nodeName)) {
name = xmlPullParser.nextText();
} else if ("version".equals(nodeName)) {
version = xmlPullParser.nextText();
}
break;
}
// 完成解析某个结点
case XmlPullParser.END_TAG: {
if ("app".equals(nodeName)) {
Log.v("tag", "ok");
Log.d("MainActivity", "id is " + id);
Log.d("MainActivity", "name is " + name);
Log.d("MainActivity", "version is " + version);
}
break;
}
default:
break;
}
eventType = xmlPullParser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}