xml文件下载到本地—XmlPullParser解析下载到本地的xml(vlc)

来源:互联网 发布:php use function 编辑:程序博客网 时间:2024/05/17 03:33

使用下载类:

XmlFileDownloadThread p2pFileThread = new XmlFileDownloadThread("http://my.7po.com/api/check/yuanli.php?macnum=" + mac,true, VideoPlayerActivity.this);XmlFileDownloadThread tvFileThread = new XmlFileDownloadThread(Constant.url_tv_new, false, VideoPlayerActivity.this);p2pFileThread.execute();tvFileThread.execute();


文件下载到本地的类:

package com.qipo.util;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import android.content.Context;import android.os.AsyncTask;public class XmlFileDownloadThread extends AsyncTask<String, Integer, Void>{private String mSavePath = null;private String urlString = null;private boolean tagP2p;private Context mContext;private File xmlFile = null;public XmlFileDownloadThread(String urlString, boolean tagP2p,Context mContext) {this.urlString = urlString;this.tagP2p = tagP2p;this.mContext = mContext;}protected Void doInBackground(String... params) {try {// if// (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))// {// String sdpath = Environment.getExternalStorageDirectory() + "/";String sdpath = mContext.getFilesDir().toString() + "/";mSavePath = sdpath + "qipotv";URL url = new URL(urlString);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.connect();InputStream is = conn.getInputStream();File file = new File(mSavePath);if (!file.exists()) {file.mkdir();chmodPath(file.getAbsolutePath());}if (tagP2p) {xmlFile = new File(mSavePath, "7pop2p.xml");} else {xmlFile = new File(mSavePath, "7potv.xml");}if (xmlFile.exists()) {xmlFile.delete();}xmlFile.createNewFile();FileOutputStream fos = new FileOutputStream(xmlFile);int numread = 0;byte buf[] = new byte[1024];while ((numread = is.read(buf)) > 0) {fos.write(buf, 0, numread);}fos.close();is.close();// }} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {if (xmlFile.exists()) {xmlFile.delete();}e.printStackTrace();}return null;}//public void run() {//try {//String sdpath = mContext.getFilesDir().toString() + "/";//mSavePath = sdpath + "qipotv";////URL url = new URL(urlString);//HttpURLConnection conn = (HttpURLConnection) url.openConnection();//conn.connect();//InputStream is = conn.getInputStream();////File file = new File(mSavePath);//if (!file.exists()) {//file.mkdir();//chmodPath(file.getAbsolutePath());//}////if (tagP2p) {//xmlFile = new File(mSavePath, "7pop2p.xml");//} else {//xmlFile = new File(mSavePath, "7potv.xml");//}//if (xmlFile.exists()) {//xmlFile.delete();//}//xmlFile.createNewFile();//FileOutputStream fos = new FileOutputStream(xmlFile);//int numread = 0;//byte buf[] = new byte[1024];////while ((numread = is.read(buf)) > 0) {//fos.write(buf, 0, numread);//}//fos.close();//is.close();//} catch (MalformedURLException e) {//e.printStackTrace();//} catch (IOException e) {//if (xmlFile.exists()) {//xmlFile.delete();//}//e.printStackTrace();//}//}public static boolean chmodPath(String path) {boolean issuccess = false;Process process = null;try {process = Runtime.getRuntime().exec("chmod 777 " + path);issuccess = process.waitFor() == 0;} catch (Exception e) {e.printStackTrace();issuccess = false;}return issuccess;}}



解析本地的xml和接口的xml不同之处就是 XmlPullParser的实例parser设置的输出流是:parser.setInput(inputStream, null);的inputStream:

本地的流:

String sdpath =mContext.getFilesDir().toString()+"/";String mSavePath = sdpath + "qipotv";File xmlFile = new File(mSavePath, "7potv.xml");try{if(xmlFile.exists()){inputStream = new FileInputStream(xmlFile);}else{return null;}

接口的流:

InputStream inputStream = null;try {final HttpPost post=new HttpPost(url);//final HttpGet get = new HttpGet(url);HttpResponse response = mHttpClient.execute(post);if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {final HttpEntity entity = response.getEntity();if (entity != null) {inputStream = entity.getContent();}}} catch (IOException e) {Log.w(TAG, "Error while retrieving XML file " + url, e);return null;}

本地解析:

package com.qipo.api;import com.qipo.bean.Channel;import com.qipo.bean.TvList;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.net.MalformedURLException;import java.util.ArrayList;import java.util.HashMap;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import android.content.Context;import android.net.http.AndroidHttpClient;import android.os.Environment;import android.util.Log;public class TvListDownloadPullParser extends XmlPullParserBase {private static final String TAG = "TvListXmlPullParser";public static TvList getTvList(Context mContext) {TvList tvlist = new TvList();ArrayList<Channel> channelList = new ArrayList<Channel>();AndroidHttpClient mHttpClient = AndroidHttpClient.newInstance("Android");Channel element=null;ArrayList<String> urlList=null;XmlPullParser parser = null;FileInputStream inputStream=null;try {XmlPullParserFactory factory = XmlPullParserFactory.newInstance();factory.setNamespaceAware(true);parser = factory.newPullParser();} catch (XmlPullParserException e) {Log.e(TAG, "Unable to create XmlPullParser", e);return null;}//if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))//{//String sdpath = Environment.getExternalStorageDirectory() + "/";String sdpath =mContext.getFilesDir().toString()+"/";String mSavePath = sdpath + "qipotv";File xmlFile = new File(mSavePath, "7potv.xml");try{if(xmlFile.exists()){inputStream = new FileInputStream(xmlFile);}else{return null;}}catch(FileNotFoundException e){Log.w(TAG, "Error while new XML file from ", e);return null;}try {if(inputStream!=null){//xlh_addparser.setInput(inputStream, null);}} catch (XmlPullParserException e) {Log.w(TAG, "Error while reading XML file from ", e);return null;}//}if (parser != null) {try {int eventType = parser.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {if (eventType == XmlPullParser.START_TAG) {String name = parser.getName();if (name.equals("header")) {tvlist.setServer(parser.getAttributeValue(null,"server"));String s = parser.getAttributeValue(null, "classes");if (s != null) {HashMap<Integer, String> menu = new HashMap<Integer, String>();ArrayList<Integer> ids = new ArrayList<Integer>();String[] ss = s.trim().split(",");for (int i = 0; i < ss.length; i++) {String[] stemp = ss[i].trim().split("-");menu.put(Integer.parseInt(stemp[0]),stemp[1]); // key-menuids.add(Integer.parseInt(stemp[0])); // keylist}tvlist.setMenu(menu);tvlist.setIds(ids);}} else if (name.equals("channel")) {urlList=new ArrayList<String>();element = new Channel();element.setId(parser.getAttributeValue(null, "id")); // idelement.setclassnum(parser.getAttributeValue(null, "classnum"));element.setUrl(parser.getAttributeValue(null, "src"));element.setEpg(parser.getAttributeValue(null, "epg")); element.setIcon(parser.getAttributeValue(null,"icon")); element.setTitle(parser.getAttributeValue(null,"name")); element.setCid(parser.getAttributeValue(null, "cid"));element.setTn(Integer.parseInt(parser.getAttributeValue(null, "tn")));element.setType(parser.getAttributeValue(null,"class"));element.setHimg(parser.getAttributeValue(null,"himg"));}else if(name.equalsIgnoreCase("url")){  urlList.add(parser.nextText().trim());                    }}else if(eventType ==XmlPullParser.END_TAG){if(parser.getName().equalsIgnoreCase("channel")){  element.setUrlList(urlList);element.setTn(urlList.size());channelList.add(element);                    }}eventType = parser.next();}} catch (MalformedURLException e) {Log.i(TAG, e.toString());return null;} catch (IOException e) {Log.i(TAG, e.toString());return null;} catch (XmlPullParserException e) {Log.i(TAG, e.toString());return null;} finally {if (mHttpClient != null) {mHttpClient.close();}}tvlist.setChannels(channelList);return tvlist;}return null;}}
解析的xml格式:




原创粉丝点击