通过URL访问出的xml如下
<update>
<package>
<filename>GMMZ_HDi.mp4</filename>
<version>4</version>
<md5>C7A665F62792A8C7F82A0DAB1ECF412D</md5>
<url>http://123.mp4</url>
<href>http://www.gmmgrammy.com/th/index.html</href>
<description>AD UPDATE</description>
<force>true</force>
<type>mp4</type>
</package>
</update>
1、根据xml新建一个实体类
public class Ads {
private String filename;
private String version;
private String md5;
private String url;
private String href;
private String description;
private boolean force;
private String type;
public Ads(String filename, String version, String md5, String url, String href, String description, boolean force, String type) {
this.filename = filename;
this.version = version;
this.md5 = md5;
this.url = url;
this.href = href;
this.description = description;
this.force = force;
this.type = type;
}
public String getFilename() {
return filename;
}
public String getVersion() {
return version;
}
public String getMd5() {
return md5;
}
public String getUrl() {
return url;
}
public String getHref() {
return href;
}
public String getDescription() {
return description;
}
public boolean isForce() {
return force;
}
public String getType() {
return type;
}
@Override
public String toString() {
return "Ads{" +
"filename='" + filename + '\'' +
", version='" + version + '\'' +
", md5='" + md5 + '\'' +
", url='" + url + '\'' +
", href='" + href + '\'' +
", description='" + description + '\'' +
", force=" + force +
", type='" + type + '\'' +
'}';
}
}
2、创建网络请求类
public class DownloadXmlTask {
private static final String TAG = "DownloadXmlTask";
@SuppressLint("UseValueOf")
public static List<Ads> getData(String xmlUrl) throws Exception {
URL url = new URL(xmlUrl);
List<Ads> adsList = null;
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(10000);
if (conn.getResponseCode() == 200) {
InputStream inputstream = conn.getInputStream();
System.out.println("网络连接成功");
ApsXmlParser apsXmlParser = new ApsXmlParser();
adsList = apsXmlParser.parse(inputstream);
return adsList;
}
return null;
}
}
3、创建解析类,解析请求下来的xml
public class AdsXmlParser {
private static final String ns = null;
public List parse(InputStream in) throws XmlPullParserException, IOException {
try {
XmlPullParser parser = Xml.newPullParser();
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(in, null);
parser.nextTag();
return readUpdate(parser);
} finally {
in.close();
}
}
//readUpdate() ⽅法处理以update为头标签,查找标记为“package”的元素作为以递归⽅式
//处理 update 的起点。如果某个标签不是 package 标签,则会跳过它。以递归⽅式处理完整个xml
//Feed 后,readUpdate() 将返回 List
private List readUpdate(XmlPullParser parser) throws XmlPullParserException, IOException {
List entries = new ArrayList();
parser.require(XmlPullParser.START_TAG, ns, "update");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
// Starts by looking for the entry tag
if (name.equals("package")) {
entries.add(readPackage(parser));
} else {
skip(parser);
}
}
return entries;
}
private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
if (parser.getEventType() != XmlPullParser.START_TAG) {
throw new IllegalStateException();
}
int depth = 1;
while (depth != 0) {
switch (parser.next()) {
case XmlPullParser.END_TAG:
depth--;
break;
case XmlPullParser.START_TAG:
depth++;
break;
}
}
}
//这里读取以package为头部标签,下面的子标签就是我们所需的实体类中的每个对象
private Ads readPackage(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, "package");
String filename = null;
String version = null;
String md5 = null;
String url = null;
String href = null;
String description = null;
boolean force = false;
String type = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("filename")) {
filename = readFilename(parser);
} else if (name.equals("version")) {
version = readVersion(parser);
} else if (name.equals("md5")) {
md5 = readMd5(parser);
} else if (name.equals("url")) {
url = readUrl(parser);
} else if (name.equals("href")) {
href = readHref(parser);
} else if (name.equals("description")) {
description = readDescription(parser);
} else if (name.equals("force")) {
force = readForce(parser);
} else if (name.equals("type")) {
type = readType(parser);
} else {
skip(parser);
}
}
Ads ads = new Ads(filename, version, md5, url, href, description, force, type);
return ads;
}
private String readType(XmlPullParser parser) {
try {
parser.require(XmlPullParser.START_TAG, ns, "type");
String type = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "type");
return type;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private boolean readForce(XmlPullParser parser) {
try {
parser.require(XmlPullParser.START_TAG, ns, "force");
boolean force = readText(parser).equals("true");
parser.require(XmlPullParser.END_TAG, ns, "force");
return force;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private String readDescription(XmlPullParser parser) {
try {
parser.require(XmlPullParser.START_TAG, ns, "description");
String description = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "description");
return description;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private String readHref(XmlPullParser parser) {
try {
parser.require(XmlPullParser.START_TAG, ns, "href");
String href = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "href");
return href;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private String readUrl(XmlPullParser parser) {
try {
parser.require(XmlPullParser.START_TAG, ns, "url");
String url = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "url");
return url;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private String readMd5(XmlPullParser parser) {
try {
parser.require(XmlPullParser.START_TAG, ns, "md5");
String md5 = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "md5");
return md5;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private String readVersion(XmlPullParser parser) {
try {
parser.require(XmlPullParser.START_TAG, ns, "version");
String version = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "version");
return version;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private String readFilename(XmlPullParser parser) {
try {
parser.require(XmlPullParser.START_TAG, ns, "filename");
String filename = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "filename");
return filename;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 对于标签title和summary,提取它们的文本值
private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
String result = "";
if (parser.next() == XmlPullParser.TEXT) {
result = parser.getText();
parser.nextTag();
}
return result;
}
}
4、使用,
private void getAds() { //页面里面需要数据时去请求
myTask = new MyTask();
myTask.execute();
}
private List<Ads> mAds = null;
private static final String ADS_URL = "http://网络xml访问地址.xml";
private class MyTask extends AsyncTask<String, Integer, List<Ads>> {
@Override
protected List<Ads> doInBackground(String... strings) {
Log.d(TAG, "doInBackground.....MyTask start work");
try {
mAds = null;
mAds = DownloadXmlTask.getData(ADS_URL);
} catch (Exception e) {
e.printStackTrace();
}
return mAds;
}
@Override
protected void onPostExecute(List<Ads> s) {
Log.d(TAG, "onPostExecute.....MyTask work finish");
if (s == null) {
Log.w(TAG, "s >>>>> null" );
return;
}
//根据需求自己处理数据就可以了
}
}