android利用HttpURLConnection+XmlPullParser解析Xml文件
需要解析的xml
第一步:配置获取网络数据权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
第二步:activity_main.xml布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.example.android_29.MainActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="a"
android:text="获取"
/>
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lv_xml"
></ListView>
</LinearLayout>
建立一个Student的类里面有两个属性name 和 sex
package com.example.android_29;
public class Student {
private String name;
private String sex;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, String sex) {
super();
this.name = name;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
'}';
}
}
MainActivity 类 这里用到了BaseAdapter适配器,利用HttpURLConnection 获取链接对象
public class MainActivity extends AppCompatActivity {
private ListView lv_xml;
private List<Student> students=new ArrayList<>();
private MybaseAdapter mybaseAdapter;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv_xml =(ListView)findViewById(R.id.lv_xml);
//实例化进度条对话框
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("在拼命加载中");
//实例化适配器
mybaseAdapter = new MybaseAdapter();
//设置适配器
lv_xml.setAdapter(mybaseAdapter);
}
public void a(View view){
new MyasyncTask().execute();
}
//适配器
class MybaseAdapter extends BaseAdapter{
private TextView tv_1;
private TextView tv_2;
@Override
public int getCount() {
return students.size();
}
@Override
public Object getItem(int i) {
return students.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
view=getLayoutInflater().inflate(R.layout.activity_main2,null);
tv_1 =(TextView)view.findViewById(R.id.tv_1);
tv_2 =(TextView)view.findViewById(R.id.tv_2);
tv_1.setText(students.get(i).getName());
tv_2.setText(students.get(i).getSex());
return view;
}
}
class MyasyncTask extends AsyncTask{
private Student student;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog.show();
}
@Override
protected Object doInBackground(Object[] objects) {
//1.确定网络路径
String path="http://193.168.2.220:8080/G150825_S2SH/studentActionXML.action";
try {
//2实例化URL
URL url=new URL(path);
//3得到链接对象
HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
//4设置请求方式
httpURLConnection.setRequestMethod("GET");
//5优化,设置链接超时的时间
httpURLConnection.setConnectTimeout(5000);
//6得到结果码
int rc= httpURLConnection.getResponseCode();
if(rc==200){
//7获取服务器返回过来的数据
InputStream is=httpURLConnection.getInputStream();
//利用PULL解析
XmlPullParser xmlPullParser= Xml.newPullParser();
try {
xmlPullParser.setInput(is,"UTF-8");
int et=xmlPullParser.getEventType();
while(et!=XmlPullParser.END_DOCUMENT){
switch (et) {
case XmlPullParser.START_TAG:
//开始标签的名字
String startTagName=xmlPullParser.getName();
if("student".equals(startTagName)){
student = new Student();
//得到name属性值
String name=xmlPullParser.getAttributeValue(0);
student.setName(name);
}else if("sex".equals(startTagName)){
//得到sex的文本值
String sex=xmlPullParser.nextText();
student.setSex(sex);
}
break;
case XmlPullParser.END_TAG:
//结束标签的名字
String endTagName=xmlPullParser.getName();
if("student".equals(endTagName)){
students.add(student);
}
break;
}
et=xmlPullParser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
//通知适配器发生改变
mybaseAdapter.notifyDataSetChanged();
progressDialog.cancel();
}
}
}