解析xml数据

解析xml数据

布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <AutoCompleteTextView
        android:id="@+id/auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:completionThreshold="1"
         />

</RelativeLayout>
逻辑代码--MaiActivity

package com.example.week2_day3_downloadxml;

import com.example.week2_day3_downloadxml.asyncTask.MyAsyncTask;

import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.view.Menu;
import android.widget.AutoCompleteTextView;
import android.widget.Spinner;

public class MainActivity extends Activity {
	
	/*
	 * 切记!切记!------需要注册网络权限
	 */
private AutoCompleteTextView auto;//声明控件
private ProgressDialog dialog;//声明提示框
//要解析的xml文件地址
private static final String xmlPath = "http://api.map.baidu.com/telematics/v3/weather?location=%E5%8C%97%E4%BA%AC&output=xml&ak=mXBIDrvTOwwmYaTtN03Lo0j2";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);//加载布局文件
        auto=(AutoCompleteTextView) findViewById(R.id.auto);//找到控件id
        dialog=new ProgressDialog(MainActivity.this);//实例化提示框
        //创建异步任务
        new MyAsyncTask(dialog,auto,MainActivity.this).execute(xmlPath);
    }
}
异步任务代码

package com.example.week2_day3_downloadxml.asyncTask;

import java.util.List;

import com.example.week2_day3_downloadxml.MainActivity;
import com.example.week2_day3_downloadxml.R;
import com.example.week2_day3_downloadxml.downXml.HttpIntenet;
import com.example.week2_day3_downloadxml.downXml.ParserXml;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Spinner;

//异步任务
public class MyAsyncTask extends AsyncTask<String, Void, List<String>> {

	private ProgressDialog dialog;// 声明提示框
	private AutoCompleteTextView auto;
	private Context context;

	public MyAsyncTask(ProgressDialog dialog, AutoCompleteTextView auto,
			Context context) {
		super();
		this.dialog = dialog;
		this.auto = auto;
		this.context = context;
	}

	@Override
	protected void onPreExecute() {
		super.onPreExecute();
		dialog.setTitle("下载xml文件");
		dialog.setIcon(R.drawable.ic_launcher);
		dialog.setMessage("正在下载.....");
		dialog.show();// 显示提示框
	}

	// 后台执行方法
	@Override
	protected List<String> doInBackground(String... params) {
		String xmlString = HttpIntenet.httpIntenet(params[0]);//获取网络权限
		List<String> list = ParserXml.parserXml(xmlString);//开始解析
		return list;
	}

	@Override
	protected void onPostExecute(List<String> result) {
		super.onPostExecute(result);
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(context,
				android.R.layout.simple_list_item_1, result);//创建适配器
		auto.setAdapter(adapter);//绑定适配器
		dialog.dismiss();//点击其他地方时,进度框消失
	}

}
网络下载

package com.example.week2_day3_downloadxml.downXml;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

//获取网络资源
public class HttpIntenet {

	public static String httpIntenet(String xmlPath){
		ByteArrayOutputStream out=new ByteArrayOutputStream();
		String list="";
		URL url;
		try {
			url=new URL(xmlPath);
			HttpURLConnection connection=(HttpURLConnection) url.openConnection();
			connection.setConnectTimeout(5000);
			connection.setDoInput(true);
			connection.connect();
			if(connection.getResponseCode()==200){
				InputStream in=connection.getInputStream();
				byte[] buffer=new byte[1024];
				int temp=0;
				while((temp=in.read(buffer))!=-1){
					out.write(buffer, 0, temp);
					out.flush();
				}
			}
			return out.toString();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}
}
开始解析

package com.example.week2_day3_downloadxml.downXml;

import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

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

//开始解析xml文件
public class ParserXml {
	public static List<String> parserXml(String xmlString) {
		List<String> list=null;
		try {
			XmlPullParserFactory factory = XmlPullParserFactory.newInstance();// 创建解析器工厂
			XmlPullParser parser = factory.newPullParser();// 创建解析器
			parser.setInput(new StringReader(xmlString));// 把xml文档放入解析器
			int type = parser.getEventType();// 获取事件类型
			while (type != XmlPullParser.END_DOCUMENT) {// 判断文档是否到结尾了
				switch (type) {
				case XmlPullParser.START_DOCUMENT://文档的开始位置
					 list = new ArrayList<String>();
					break;
				case XmlPullParser.START_TAG://事件类型
					String nodeName = parser.getName();//得到节点的名称
					if("weather".equals(nodeName)){
						String name = parser.nextText();//得到标签里的内容
						list.add(name);
					}

				default:
					break;
				}
				type=parser.next();//继续产生事件

			}
			return list;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;

	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值