main.xml [html] view plaincopyprint? <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/CityName" android:layout_width="250dp" android:layout_height="wrap_content" android:layout_marginTop="2dip" android:text="shenzhen"> </EditText> <Button android:id="@+id/ButtonGo" android:layout_width="70dp" android:layout_height="wrap_content" android:layout_gravity="right|top" android:text="go!go!"> </Button> </LinearLayout> <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="vertical" android:background="#ffffff" android:textColor="#000000" android:id="@+id/infoText" /> </LinearLayout> weatherActivity.java [html] view plaincopyprint? public class weatherActivity extends Activity { private Button mButton = null; private TextView mTextView = null; private EditText mCityNameEdit = null; final String DEBUG_TAG = "weather"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mTextView = (TextView)findViewById(R.id.infoText); mTextView.setMovementMethod(ScrollingMovementMethod.getInstance()); mCityNameEdit = (EditText)findViewById(R.id.CityName); mButton = (Button) findViewById(R.id.ButtonGo); mButton.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { connect(); } }); } } 1.连接网络,基于Http协议。 一般是发送请求到某个应用服务器。此时需要用到HttpURLConnection,打开连接,获得数据流,读取数据流。 private void connect() { //http地址 //String httpUrl = "http://flash.weather.com.cn/wmaps/xml/shenzhen.xml"; String httpUrl = "http://flash.weather.com.cn/wmaps/xml/"+mCityNameEdit.getText().toString()+".xml"; String resultData = "";//获得的数据 URL url = null; try { //构造一个URL对象 url = new URL(httpUrl); } catch (MalformedURLException e) { Log.e(DEBUG_TAG, "MalformedURLException"); } if (url != null) { try { //使用HttpURLConnection打开连接 HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); //得到读取的内容(流) InputStreamReader in = new InputStreamReader(urlConn.getInputStream()); // 为输出创建BufferedReader BufferedReader buffer = new BufferedReader(in); String inputLine = null; //使用循环来读取获得的数据 while (((inputLine = buffer.readLine()) != null)) { //我们在每一行后面加上一个"\n"来换行 resultData += inputLine + "\n"; } in.close(); urlConn.disconnect(); //设置显示取得的内容 if ( resultData != null ) { mTextView.setText(""); weatherInfoXmlPullParser(resultData);//解析XML } else { mTextView.setText("读取的内容为NULL"); } } catch (IOException e) { Log.e(DEBUG_TAG, "IOException"); } } else { Log.e(DEBUG_TAG, "Url NULL"); } } 2.用PULL方式解析xml PULL方式读xml会回调事件: 读取到xml的声明返回 START_DOCUMENT; 读取到xml的结束返回 END_DOCUMENT ; 读取到xml的开始标签返回 START_TAG 读取到xml的结束标签返回 END_TAG 读取到xml的文本返回 TEXT public void weatherInfoXmlPullParser(String buffer){ XmlPullParser xmlParser = Xml.newPullParser();//获得XmlPullParser解析器 ByteArrayInputStream tInputStringStream = null; if (buffer != null && !buffer.trim().equals("")) { tInputStringStream = new ByteArrayInputStream(buffer.getBytes()); } else { return ; } try { //得到文件流,并设置编码方式 //InputStream inputStream=mContext.getResources().getAssets().open(fileName); //xmlParser.setInput(inputStream, "utf-8"); xmlParser.setInput(tInputStringStream, "UTF-8"); //获得解析到的事件类别,这里有开始文档,结束文档,开始标签,结束标签,文本等等事件。 int evtType=xmlParser.getEventType(); while(evtType!=XmlPullParser.END_DOCUMENT)//一直循环,直到文档结束 { switch(evtType) { case XmlPullParser.START_TAG: String tag = xmlParser.getName(); //如果是city标签开始,则说明需要实例化对象了 if (tag.equalsIgnoreCase("city")) { weatherInfo info = new weatherInfo(); //取出标签中的一些属性值 info.setCityWeatherInfo(xmlParser); mTextView.append(info.getCityWeatherInfo()+"\n"); } break; case XmlPullParser.END_TAG: //标签结束 default:break; } //如果xml没有结束,则导航到下一个节点 evtType=xmlParser.next(); } } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } weatherInfo.java public class weatherInfo{ static String cityname = "深圳"; static String stateDetailed ="多云转阵雨"; static String tem1 ="28"; static String tem2 ="22"; static String temNow ="25"; static String windState="微风"; static String windDir="北风"; static String windPower="2级"; static String humidity="63%"; static String time="10:30"; public void setCityWeatherInfo(XmlPullParser xmlParser) { cityname = xmlParser.getAttributeValue(null, "cityname"); stateDetailed = xmlParser.getAttributeValue(null, "stateDetailed"); tem1 = xmlParser.getAttributeValue(null, "tem1"); tem2 = xmlParser.getAttributeValue(null, "tem2"); temNow = xmlParser.getAttributeValue(null, "temNow"); windState = xmlParser.getAttributeValue(null, "windState"); windDir = xmlParser.getAttributeValue(null, "windDir"); windPower = xmlParser.getAttributeValue(null, "windPower"); humidity = xmlParser.getAttributeValue(null, "humidity"); time = xmlParser.getAttributeValue(null, "time"); } public String getCityWeatherInfo() { String info = "所在城市:"+cityname + "\n" +"天气情况:"+stateDetailed + ", 湿度:" +humidity + "\n" +"现在气温:"+temNow + "°C, "+"最低:"+tem2 + "°C, "+"最高:"+tem1 + "°C\n" +"风情:"+windState +", 风向:"+windDir + ", 风力:"+windPower + "\n" +"更新时间:"+time + "\n"; return info; } }
相关推荐
在Android应用开发中,获取和展示天气预报信息是一项常见的任务。在这个过程中,通常需要从服务器端获取XML格式的天气数据,然后使用XML解析技术来处理这些数据,最后将其展示给用户。本文将深入探讨如何利用Android...
在Android系统中,XML Pull解析是一种轻量级且高效的解析XML文档的方法,它允许应用程序按需读取XML文档的节点,而无需加载整个文档到内存中。以下是关于Android XML Pull解析的详细知识讲解。 1. **XML Pull解析器...
在Android开发中,创建一个天气预报应用是一项常见的任务,它涉及到网络请求、数据解析、UI设计等多个技术领域。本示例项目"Android天气预报例子从weather.com.cn读取"就是一个典型的实战案例,它以聊城市为例,展示...
在Android开发中,创建一个天气预报应用是一项常见的任务,它涉及到网络请求、数据解析、UI设计等多个技术领域。本例子将重点关注如何利用第三方API获取天气信息,并在Android应用中展示。我们将讨论以下关键知识点...
Android系统提供了一种轻量级的XML解析方式——PULL解析器(Pull Parser),它适用于处理大型XML文档,因为它不需要像DOM解析器那样一次性加载整个XML文档到内存中。PULL解析器通过事件驱动的方式,按需解析XML文档...
通过这个天气预报项目,开发者可以全面了解Android应用开发的基本流程,包括界面设计、网络编程、数据解析、异步操作以及用户互动等关键环节。对于初学者,这是一个很好的起点,可以在此基础上扩展更多功能,比如...
在Android中,有两种主要的XML解析方法:DOM解析(Document Object Model)和SAX解析(Simple API for XML)。 - DOM解析:一次性加载整个XML文档到内存,适合小规模的XML文件。 - SAX解析:事件驱动型解析,只读取...
本文将深入探讨如何使用DOM(Document Object Model)解析XML在Android应用中的实践。DOM解析方式允许开发者一次性加载整个XML文档到内存中,形成一个树形结构,便于遍历和操作。尽管对于大型XML文件,DOM解析可能因...
本篇将详细探讨Android中的XML解析,特别是PULL解析方式,并讲解如何进行XML的写入操作。 ### 1. Android XML解析概述 XML解析器分为两种主要类型:DOM(Document Object Model)和PULL(Pull Parser)。DOM解析器...
以上就是"13pull解析xml天气信息"这个Android开发例子中所涵盖的关键技术点,涵盖了网络通信、XML解析、数据处理以及用户界面设计等多个核心领域。通过这个例子,开发者可以深入理解Android应用中数据获取和处理的...
本例使用多种方式获取本地XML文件,还有通过url获取XML文件,使用Android内置的PULL解析器对XML文件进行解析,例子是解析我国各个省市。 《Android解析XML文件》博文路径:...
在Android开发中,XML(可扩展...在"Android解析xml的Demo"中,你可以找到这三种解析方式的具体实现,通过查看和运行代码,加深对XML解析的理解。同时,这个Demo也可以作为工具,帮助你在项目中快速集成XML解析功能。
总结起来,Android中的XML生成和PULL解析是两个重要的技能。生成XML文件可以方便地存储和传输数据,而PULL解析器则提供了一种高效、低内存消耗的方式来解析XML数据。理解并熟练掌握这些技术对于Android开发者来说至...
在Android开发领域,天气预报应用是一个常见的学习项目,它涵盖了众多基础和进阶的编程概念。本实例,"一款很好用的天气预报例子",旨在帮助开发者了解如何在Android平台上构建一个功能齐全的天气应用程序。下面,...
XML解析主要分为两种方式:DOM(Document Object Model)和SAX(Simple API for XML)。 1. **DOM解析**:DOM解析器会将整个XML文档加载到内存中,形成一个树形结构,便于遍历和操作。在Android中,可以使用`org.w3...
SAX是一种事件驱动的XML解析器,它不会像DOM解析器那样将整个XML文档加载到内存中,而是逐行读取,遇到每个元素或属性时触发相应的事件回调。这种方式节省了内存,特别适合处理大型XML文件。 1. **SAX解析的基本...
本讲解将深入探讨XML解析在Android中的应用,并通过具体的例子"XmlResTest"来辅助理解。 一、XML基础 XML是一种可扩展的标记语言,与HTML类似,但更注重数据的结构和语义。XML文档由元素(Element)、属性...
在压缩包中的“Android例子源码安卓学习xml解析获取天气信息源码”,虽然标题提到的是JSON解析,但源码包含了XML解析,这表明可能提供了两种不同的数据解析方式的示例。XML(eXtensible Markup Language)是另一种...
例如,天气预报界面需展示温度、湿度等信息,而SMS界面则需显示短信的发送时间、目标号码和天气详情。 3. **数据库设计**: - 数据库用于存储配置信息和SMS服务信息。Android提供了多种存储方式,如...
总结起来,本教程主要介绍了如何在Android Studio项目中利用Retrofit和simplexml库进行XML数据的网络请求和解析。通过定义服务接口、配置Retrofit实例以及创建对应的Java模型类,我们可以方便地处理XML格式的API数据...