解析xml数据

来源:互联网 发布:linux nc 发送数据 编辑:程序博客网 时间:2024/06/16 01:19

解析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;}@Overrideprotected void onPreExecute() {super.onPreExecute();dialog.setTitle("下载xml文件");dialog.setIcon(R.drawable.ic_launcher);dialog.setMessage("正在下载.....");dialog.show();// 显示提示框}// 后台执行方法@Overrideprotected List<String> doInBackground(String... params) {String xmlString = HttpIntenet.httpIntenet(params[0]);//获取网络权限List<String> list = ParserXml.parserXml(xmlString);//开始解析return list;}@Overrideprotected 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;}}


0 0