您的位置:首页 > 移动开发 > Android开发

Android - 使用XmlPullParser解析从服务器得到的Xml数据

2017-02-24 20:30 656 查看
效果图如下:
下面是代码:
package com.example.diy_network;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

private Person person;
private List<Person> persons = new ArrayList<>();
private ListView lv_mian_listView;
private MyAdapter myAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv_mian_listView = (ListView) findViewById(R.id.lv_mian_ListView);
myAdapter = new MyAdapter();
lv_mian_listView.setAdapter(myAdapter);
}

public void getData(View view) {
new MyTask().execute();
}

class MyTask extends AsyncTask{

@Override
protected Object doInBackground(Object[] params) {
try {
URL url = new URL("http://localhost/Pazz/xxxx.action");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setReadTimeout(5000);
int code = urlConnection.getResponseCode();
if (code == 200) {
InputStream is = urlConnection.getInputStream();
XmlPullParser xpp = Xml.newPullParser();
xpp.setInput(is, "UTF-8");
int type = xpp.getEventType();
while (type != xpp.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG:
//获取开始标签的名字
String startTagName = xpp.getName();
if ("person".equals(startTagName)) {
person = new Person();
//获取name属性值
int pid = Integer.parseInt(xpp.getAttributeValue(0));
person.setPid(pid);
} else if ("page".equals(startTagName)) {
//获取sex的文本值
int page = Integer.parseInt(xpp.nextText());
person.setPage(page);
}
else if ("pname".equals(startTagName)) {
//获取sex的文本值
String pname = xpp.nextText();
person.setPname(pname);
}
break;
case XmlPullParser.END_TAG:
//获取到结束标签的名字
String endTagName = xpp.getName();
if ("person".equals(endTagName)) {
persons.add(person);
}
break;
}
type = xpp.next();
}
}

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
return null;
}

@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
lv_mian_listView.setAdapter(myAdapter);
}
}

class MyAdapter extends BaseAdapter {

@Override
public int getCount() {
return persons.size();
}

@Override
public Object getItem(int position) {
return persons.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout linearLayout = new LinearLayout(MainActivity.this);
linearLayout.setGravity(Gravity.CENTER);
TextView tv1 = new TextView(MainActivity.this);
tv1.setWidth(300);
tv1.setText(""+persons.get(position).getPid());
TextView tv2 = new TextView(MainActivity.this);
tv2.setWidth(300);
tv2.setText(""+persons.get(position).getPname());
TextView tv3 = new TextView(MainActivity.this);
tv3.setWidth(200);
tv3.setText(""+persons.get(position).getPage());
linearLayout.addView(tv1);
linearLayout.addView(tv2);
linearLayout.addView(tv3);
return linearLayout;
}
}

}
下面是布局文件:
package com.example.diy_network;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

private Person person;
private List<Person> persons = new ArrayList<>();
private ListView lv_mian_listView;
private MyAdapter myAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv_mian_listView = (ListView) findViewById(R.id.lv_mian_ListView);
myAdapter = new MyAdapter();
lv_mian_listView.setAdapter(myAdapter);
}

public void getData(View view) {
new MyTask().execute();
}

class MyTask extends AsyncTask{

@Override
protected Object doInBackground(Object[] params) {
try {
URL url = new URL("http://localhost/Pazz/xxxx.action");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setReadTimeout(5000);
int code = urlConnection.getResponseCode();
if (code == 200) {
InputStream is = urlConnection.getInputStream();
XmlPullParser xpp = Xml.newPullParser();
xpp.setInput(is, "UTF-8");
int type = xpp.getEventType();
while (type != xpp.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG:
//获取开始标签的名字
String startTagName = xpp.getName();
if ("person".equals(startTagName)) {
person = new Person();
//获取name属性值
int pid = Integer.parseInt(xpp.getAttributeValue(0));
person.setPid(pid);
} else if ("page".equals(startTagName)) {
//获取sex的文本值
int page = Integer.parseInt(xpp.nextText());
person.setPage(page);
}
else if ("pname".equals(startTagName)) {
//获取sex的文本值
String pname = xpp.nextText();
person.setPname(pname);
}
break;
case XmlPullParser.END_TAG:
//获取到结束标签的名字
String endTagName = xpp.getName();
if ("person".equals(endTagName)) {
persons.add(person);
}
break;
}
type = xpp.next();
}
}

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
return null;
}

@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
lv_mian_listView.setAdapter(myAdapter);
}
}

class MyAdapter extends BaseAdapter {

@Override
public int getCount() {
return persons.size();
}

@Override
public Object getItem(int position) {
return persons.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout linearLayout = new LinearLayout(MainActivity.this);
linearLayout.setGravity(Gravity.CENTER);
TextView tv1 = new TextView(MainActivity.this);
tv1.setWidth(300);
tv1.setText(""+persons.get(position).getPid());
TextView tv2 = new TextView(MainActivity.this);
tv2.setWidth(300);
tv2.setText(""+persons.get(position).getPname());
TextView tv3 = new TextView(MainActivity.this);
tv3.setWidth(200);
tv3.setText(""+persons.get(position).getPage());
linearLayout.addView(tv1);
linearLayout.addView(tv2);
linearLayout.addView(tv3);
return linearLayout;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: