下载、缓存、解析XML文件Pull解析

注意:Url地址可以自己换,解析节点可以换


	TextView show1;
	TextView show2;
	TextView show3;
	String text1 = "";
	String text2 = "";
	String text3 = "";
	String url = "http://witcard.net/image/config/android_version_iCard.xml";
	// URL地址
	static String dir = ".tanghongyu/";
	// 缓存存放的文件夹
	Context context;
	File file = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		context = getApplicationContext();
		show1 = (TextView) findViewById(R.id.show1);
		show2 = (TextView) findViewById(R.id.show2);
		show3 = (TextView) findViewById(R.id.show3);
		File cacheDir = null;
		if (url.indexOf("android_version_iCard") != -1) {
			if (android.os.Environment.getExternalStorageState().equals(
					android.os.Environment.MEDIA_MOUNTED)) {
				file = new File(
						android.os.Environment.getExternalStorageDirectory(),dir
								+ url.subSequence(
										url.indexOf("android_version_iCard"),url.length()));
			} else {
				cacheDir = makeDirs(
						context,dir
								+ "/"
								+ url.subSequence(
										url.indexOf("android_version_iCard"),url.length()));
				file = new File(cacheDir
						+ "/"
						+ url.subSequence(url.indexOf("android_version_iCard"),url.length()));
			}
		}

		downFile(url);

	}
	
	/**
	 * 
	 *@Description 下载Xml文件
	 * @param xml  下载地址
	 */
	public void downFile(final String xml) {
		new Thread() {
			public void run() {
				super.run();
				URL url = null;
				HttpURLConnection urlConn = null;
				InputStream inputStream = null;

				if (!file.getParentFile().exists()) {
					file.getParentFile().mkdirs();
				}
				FileOutputStream fos = null;
				try {
					url = new URL(xml);
					urlConn = (HttpURLConnection) url.openConnection();
					urlConn.setConnectTimeout(15000);
					inputStream = urlConn.getInputStream();
					if (!file.exists()
							|| (urlConn.HTTP_OK == urlConn.getResponseCode())) {
						fos = new FileOutputStream(file);
						final byte[] bytes = new byte[1024];
						int read = 0;
						while ((read = inputStream.read(bytes)) >= 0) {
							fos.write(bytes,read);
						}
					}
					setConfig(file);

			
				} catch (Exception e) {
					e.printStackTrace();
					try {
						setConfig(file);
					} catch (Exception e1) {
	
						e1.printStackTrace();
					}
					// if (null != file && file.exists()) {
					// file.delete(); // 删除
					// }
				} finally {
					if (inputStream != null) {
						try {
							inputStream.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
					if (urlConn != null) {
						urlConn.disconnect();
					}

					if (null != fos) {
						try {
							fos.close();
						} catch (IOException e) {

							e.printStackTrace();
						}
					}
				}
			}

		}.start();
	}
	
	/**
	 * 
	 *@Description 创建文件夹
	 * @param context
	 * @param path
	 * @return
	 */
	private static File makeDirs(Context context,String path) {
		File cacheDir = null;
		if (android.os.Environment.getExternalStorageState().equals(
				android.os.Environment.MEDIA_MOUNTED)) {
			cacheDir = new File(
					android.os.Environment.getExternalStorageDirectory(),path);
		} else {
			cacheDir = context.getCacheDir();
		}
		if (!cacheDir.exists())
			cacheDir.mkdirs();
		return cacheDir;
	}

	/**
	 * 
	 * @Description 解析XML
	 * @param 文件路径
	 * @throws Exception
	 */
	private void setConfig(File xml) throws Exception {
		XmlPullParser parser = Xml.newPullParser();
		InputStream is = new FileInputStream(xml);
		parser.setInput(is,"UTF-8");
		int event = parser.getEventType();
		while (event != parser.END_DOCUMENT) {
			switch (event) {
			case XmlPullParser.START_DOCUMENT:
				break;

			case XmlPullParser.START_TAG:
				if (parser.getName().equals("version")) {
					text1 = parser.nextText();
					handler.sendEmptyMessage(0);
				} else if (parser.getName().equals("client_num")) {
					text2 = parser.nextText();
					handler.sendEmptyMessage(0);
				} else if (parser.getName().equals("upgradeURL")) {
					text3 = parser.nextText();
					handler.sendEmptyMessage(0);
				}
				break;

			case XmlPullParser.END_DOCUMENT:
				break;
			}
			event = parser.next();
		}

	}
	
	/**
	 * 在UI上显示
	 */
	Handler handler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			if (msg.what == 0) {
				if (!text1.equals("")) {
					show1.setText(text1);
				}
				if (!text2.equals("")) {
					show2.setText(text2);
				}
				if (!text3.equals("")) {
					show3.setText(text3);
				}

			}
			super.handleMessage(msg);
		}

	};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇