昨日看书,发现了一个不错的练习应用。
是一个天气预报的查询,我认为这个应用考察点还算比较全面。
打起精神,试着一做。昨日下午到刚才,基本上是做完了。
为了避免自己忘记写这个应用中的一些收获,遂姑且写入博客。
既然发表在了博客,就不免被各位达人或围观或小觑。
欢迎大家指点。
首先介绍一下这个应用,其实很简单:
首先从一个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);
分享到:
相关推荐
本资源提供了一个实际的Android应用市场项目源码,非常适合初学者进行深入学习。这个项目是基于Android Studio构建的,Android Studio作为Google官方推荐的集成开发环境,具有强大的功能和友好的开发体验。 首先,...
《Android移动应用基础教程》(Android Studio)(第二版)源代码.zip是一个包含与Android应用程序开发相关的源码和练习解答的资源包。这个压缩文件旨在为学习Android Studio的初学者提供实践指导,帮助他们理解并...
"初学android程序练习源码"这个资源提供了一系列简单的源代码示例,旨在帮助新手熟悉Android应用开发的基本概念和常用技术。这些源码通常包括了Android应用程序的基础结构、用户界面设计、数据存储、网络通信等多个...
"android练习代码"这个资源就是一个很好的起点,它包含了一系列可运行的代码示例,适用于那些刚刚接触Android编程的同学们。这些代码实例旨在帮助学习者理解并掌握Android应用程序的基础构建块。 首先,我们来看...
【标题】"第一行代码Android学习练习代码9" 涉及的是Android开发中的实践环节,这...对于每一个具体的文件,开发者应详细阅读代码,理解其工作原理,同时可以尝试修改和扩展它们,以进一步提高对Android开发的理解。
在Android开发领域,初学者经常会通过实践项目来巩固学习,比如创建一个20以内加减法运算的练习应用。这个项目对于理解Android的基础组件和数据处理有很好的帮助。标题和描述提到的关键点主要包括“GridView”、...
【Android-AndroidDemo一个自己平时练习的demo---MaterialDesign】是一个专注于Android开发的项目,它主要展示了Material Design设计规范的应用,以及对View、动画、二维码和列表等常见功能的实践。Material Design...
在C#与Android的结合中, Mono for Android是关键工具,它是Xamarin公司(现已被微软收购)开发的一个开源项目,允许开发者使用C#、VB.NET或F#编写Android应用,并且可以充分利用.NET Framework的强大功能。...
"android开发练习demo"是一个典型的学习资源,它由一位自学Android应用开发的爱好者创建,旨在帮助初学者掌握基础控件的使用和调试技巧。这个压缩包包含了作者在学习过程中编写的几个小型应用程序示例,这些示例可以...
"Android代码-安卓天气练习项目"是这样一个实例,它提供了一个完整的代码库,可以帮助学习者深入理解Android应用程序的构建过程。 该项目名为"myweather",通常包括以下几个关键组成部分: 1. **项目结构**:一个...
本文档将介绍一个典型的注册界面设计实例,其中包含了多种常用的Android UI控件,并对它们的基本用法进行详细解释。 #### 二、控件列表与功能 1. **TextView** - 用途:用于显示静态文本信息。 - 属性解析: - `...
课件源程序是学习此书的重要辅助资料,提供了丰富的实例和练习,帮助读者更好地理解和实践Android编程。 在Android应用程序开发中,我们首先会接触到的是Android SDK(Software Development Kit),它包含了开发...
至于压缩包内的"2014.10.27SQLite练习1",可能包含了一个示例项目,演示了如何在Android应用中实际使用SQLiteOpenHelper和SQLiteDatabase进行数据操作。这个项目可能包括了数据库操作的代码示例,例如如何实例化...
《第一行代码Android学习练习代码》是针对初学者的一个实践项目,主要涵盖了Android应用开发的基础知识。这个压缩包中的"DYHDM_02_00ActivityTest"很可能是一个示例程序,用于演示和练习Android中的Activity管理。...
开发者需要安装Android Studio,这是一个集成开发环境(IDE),提供了编写、调试和打包应用的一站式服务。 2. **基本UI组件与布局管理** Android应用界面由各种UI组件组成,如按钮、文本框、图像视图等。布局管理器...
【Android应用源码待办事项提醒项目】是一个深入学习Android应用程序开发的宝贵资源,它包含了一个实际的待办事项管理应用的完整源代码。通过分析和研究这个项目,开发者可以了解如何在Android平台上构建功能丰富的...
"android 调色板小练习"是一个关于如何在Android应用中实现自定义颜色选择器的实践教程。在这个练习中,我们将探讨如何创建一个功能丰富的ColorPicker,使用户能够选择并自定义颜色。这个小练习涉及到的关键词有...
移动操作系统原理与实践——基于Java语言的Android应用开发 目录 基础篇 第1章移动操作系统概论 1.1操作系统的原理与概念 1.1.1隐藏硬件细节 ...第3章第一个Android应用程序 3.1使用Android Studio工具创建项目
在Android开发中,PreferenceActivity是用于创建设置界面的一个重要组件。它允许开发者通过XML定义UI元素,如开关、单选按钮、复选框等,并在活动中动态加载这些元素,简化了构建用户设置界面的过程。本篇文章将深入...