在VS.Net2010开发平台学习云计算开发
2010-11-22 17:29
204 查看
昨日看书,发现了一个不错的练习应用。
是一个天气预报的查询,我认为这个应用考察点还算比较全面。
打起精神,试着一做。昨日下午到刚才,基本上是做完了。
为了避免自己忘记写这个应用中的一些收获,遂姑且写入博客。
既然发表在了博客,就不免被各位达人或围观或小觑。
欢迎大家指点。
首先介绍一下这个应用,其实很简单:
首先从一个url获取描述天气信息的xml文件,之后解析,最后展示的UI。
该url为google提供:http://www.google.com/ig/api?hl=zh_cn&weather=需要查询的城市。
因为是自己的练习之作,所以根据自身情况加了一些东西。
有以下几点:
1,前台使用Spinner展示可供查询的城市列表。(未使用EditText)
2,Spinner所需数据(城市列表的字符串数组),由SharedPreferences读取。
3,用startActivityForResult,调用另一个Activity进行数据的初始化。这么做也许是没必要的,关键是为了再熟悉下Activity之间的数据传递。
4,查询天气时,没有进行Activity的跳转,而是使用了setContentView改换布局文件,用于显示查询结果。
6,展示信息的界面,用代码编写,未用xml布局文件。(也为练习用,熟悉多种方式)
5,xml解析,用DOM解析。
在做这个应用时遇到了以下几个问题,有必要记下来:
1,xml解析时,因为xml文件是以流的形式读取。而Google提供的这篇xml却没声明文件的编码类型。导致获取Document对象时,因为不能解析而出现异常。
我想到了这是由于流的编码问题造成的,于是想办法,希望给流设置一个编码集。
最后采用的是这个方法:
首先把读取到的流按需要的编码集构建成一个字符串,然后再根据这个编码后的字符串获取字节数组,构建一个字节数组输入流。
这个方法可能不好,但我只能想到这了。
2,书上说解析xml时,可以调用normalize方法,来去掉xml文件中因格式化而留下的空白文本节点。我试了下,不行,也不知道为什么。
最后还是用hasAttribute方法来判断的,剔除了那些空白。
3,关于用startActivityForResult,通过另一个Activity来初始化数据的问题。
数据初始化的代码,应该写在onActivityResult中,不可写在其他地方(比如onCreate方法内),否则会因为初始化数据还没返回,而导致初始化失败。
比如,我通过另一个Activity查询到了城市列表字符串数组,需要在onActivityResult中完成对Spinner的数据填充。(应用第一次启动时)
4,利用setContentView来改变布局的问题。简言之,利用这个方法,只会在界面上显示xml布局文件上有的内容。其余用代码编写的内容不会保留,比如对某个组件设置的事件监听。(貌似,监听也可以在xml布局文件绑定,我还没试过)。
所以在跳转时,一定要重新设置组件的监听等。
5,在另一个页面设置前一个页面中组件的监听时,也有一个问题。
虽然代码是用R.id.xxx来获取组件的,但是实际上前提是该xml布局文件已经被加载了。
否则该方法会返回null。
是一个天气预报的查询,我认为这个应用考察点还算比较全面。
打起精神,试着一做。昨日下午到刚才,基本上是做完了。
为了避免自己忘记写这个应用中的一些收获,遂姑且写入博客。
既然发表在了博客,就不免被各位达人或围观或小觑。
欢迎大家指点。
首先介绍一下这个应用,其实很简单:
首先从一个url获取描述天气信息的xml文件,之后解析,最后展示的UI。
该url为google提供:http://www.google.com/ig/api?hl=zh_cn&weather=需要查询的城市。
因为是自己的练习之作,所以根据自身情况加了一些东西。
有以下几点:
1,前台使用Spinner展示可供查询的城市列表。(未使用EditText)
2,Spinner所需数据(城市列表的字符串数组),由SharedPreferences读取。
3,用startActivityForResult,调用另一个Activity进行数据的初始化。这么做也许是没必要的,关键是为了再熟悉下Activity之间的数据传递。
4,查询天气时,没有进行Activity的跳转,而是使用了setContentView改换布局文件,用于显示查询结果。
6,展示信息的界面,用代码编写,未用xml布局文件。(也为练习用,熟悉多种方式)
5,xml解析,用DOM解析。
在做这个应用时遇到了以下几个问题,有必要记下来:
1,xml解析时,因为xml文件是以流的形式读取。而Google提供的这篇xml却没声明文件的编码类型。导致获取Document对象时,因为不能解析而出现异常。
我想到了这是由于流的编码问题造成的,于是想办法,希望给流设置一个编码集。
最后采用的是这个方法:
//以上略··· InputStream is = conn.getInputStream(); byte [] b = new byte [is.available()]; is.read(b); String s = new String(b,Const.CHARSET); return new ByteArrayInputStream(s.getBytes());
首先把读取到的流按需要的编码集构建成一个字符串,然后再根据这个编码后的字符串获取字节数组,构建一个字节数组输入流。
这个方法可能不好,但我只能想到这了。
2,书上说解析xml时,可以调用normalize方法,来去掉xml文件中因格式化而留下的空白文本节点。我试了下,不行,也不知道为什么。
最后还是用hasAttribute方法来判断的,剔除了那些空白。
3,关于用startActivityForResult,通过另一个Activity来初始化数据的问题。
数据初始化的代码,应该写在onActivityResult中,不可写在其他地方(比如onCreate方法内),否则会因为初始化数据还没返回,而导致初始化失败。
比如,我通过另一个Activity查询到了城市列表字符串数组,需要在onActivityResult中完成对Spinner的数据填充。(应用第一次启动时)
4,利用setContentView来改变布局的问题。简言之,利用这个方法,只会在界面上显示xml布局文件上有的内容。其余用代码编写的内容不会保留,比如对某个组件设置的事件监听。(貌似,监听也可以在xml布局文件绑定,我还没试过)。
所以在跳转时,一定要重新设置组件的监听等。
5,在另一个页面设置前一个页面中组件的监听时,也有一个问题。
虽然代码是用R.id.xxx来获取组件的,但是实际上前提是该xml布局文件已经被加载了。
否则该方法会返回null。
//必须先设置了布局,才能findViewById,否则因为没有对应的布局文件而找不到 context.setContentView(R.layout.main); //利用setContentView切换页面,需要重新设置监听,代码是相同的 context.setOnclick(context); context.setSpinner(context);
相关文章推荐
- 帮助学习云计算开发的几个开源平台
- 帮助学习云计算开发的几个开源平台
- .Net语言 APP开发平台——Smobiler学习日志:用Gridview控件设计较复杂的表单
- 多平台原生B4X开发学习日志-第4天
- .Net语言 APP开发平台——Smobiler学习日志:快速实现应用中的图片、声音等文件上传功能
- .Net语言 APP开发平台——Smobiler学习日志:如何在手机上显示类似EXCEL表格
- 大数据开发、云计算开发学习路线
- 微信平台开发学习笔记一
- AX2009 VS平台报表开发学习笔记(一)--初体验
- .Net语言 APP开发平台——Smobiler学习日志:获取或存储图像路径设置
- qnx平台下的kanzi开发-rightwareUI开发学习-kanzi图形开发
- 学习在win7上搭建android开发平台
- [转载]学习笔记《.NET框架程序设计(修订版)》--第一章 Microsoft .NET框架开发平台体系架构(2)
- 信息系统开发平台OpenExpressApp - 学习必备知识
- ARM硬件平台上基于UCOS移植Lwip网络协议栈 分类: 嵌入式开发学习 2015-06-14 10:33 55人阅读 评论(1) 收藏
- 【云计算的1024种玩法】搭建Linux学习平台
- ROS学习笔记(三)补充篇pionner3 DX -win平台下开发
- TQ2440 学习笔记—— 1、Windows平台下开发工具安装与环境建立
- 深度学习Caffe平台开发环境准备——2.python命令行中import caffe报错的解决方案
- jfinal学习笔记【1】-laymi(雷米快速开发平台)