解析xml数据
2015-09-17 08:36
507 查看
解析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; } }
相关文章推荐
- jQuery Colorbox插件
- HDOJ 1495 非常可乐 【BFS】
- C++ 头文件
- 天声人語 20150917
- LeetCode-Summary Ranges
- 关于Edittext边框的
- Volley框架解析(五)-----HttpStack接口及其默认实现类解析
- hdu1180奇怪的楼梯……bfs迷阵……wa该16二级,我太渣滓
- C++ 分糖果问题-求一组数的最大公倍数
- CentOS7安装nagios并配置出图详解
- 蓝懿iOS培训日志14 测试日及测试总结
- log4j.rootLogger详细说明
- C++各大有名库的介绍 http://my.oschina.net/qihh/blog/55591
- Hadoop集群MapReduce经典案例
- [转载] 深入理解Linux修改hostname
- log4j.appender.stdout.layout.ConversionPattern
- HDU 5438 topo
- C/C++ 开发库 | C/C++ Development Library http://blog.csdn.net/herorenme/article/details/18795935
- 黑马程序员——java基础知识篇——>反射
- 如何提高团队管理能力1