昨日看书,发现了一个不错的练习应用。
是一个天气预报的查询,我认为这个应用考察点还算比较全面。
打起精神,试着一做。昨日下午到刚才,基本上是做完了。
为了避免自己忘记写这个应用中的一些收获,遂姑且写入博客。
既然发表在了博客,就不免被各位达人或围观或小觑。
欢迎大家指点。
首先介绍一下这个应用,其实很简单:
首先从一个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 应用程序,开发者需要掌握一些必要 的技术。 1. Java 编程语言 Java 编程语言是 Android 平台的主要编程语言, 因此开发者需要熟悉 Java 语法和面向对象编程(OOP)的基本概念,...
这个是学习Android Service时的一个练习!
移动操作系统原理与实践——基于Java语言的Android应用开发 目录 基础篇 第1章移动操作系统概论 1.1操作系统的原理与概念 1.1.1隐藏硬件细节 ...第3章第一个Android应用程序 3.1使用Android Studio工具创建项目
练习Android SQLite时的第一个练习,采用SQLiteOpenHelper类来帮助实现。具体sql语句是通过SQLiteDatabase里面封装好的方法!
这是一个基于 MVVM 结构的练习项目,使用 Kotlin 语言开发,主要尝试了 Andorid Jetpack 中的 DataBinding, ViewModel, LiveData 和 Room. 另外练习了一下 viewGroup 的绘制(见项目中的SToolbar和...
Android移动应用开发案例教程(慕课版)-课后练习第一章 一、单选题 1 .下面关于模拟器的说法,正确的是()。 在模拟器上可预览和测试 Android 应用程序 只可以在模拟器上预览 Android 应用程序 只可以在...
第1章 Android简介 1.1 手机操作系统 1.2 Android起源 1.3 Android特征 1.4 Android体系结构 1.4.1 应用层 1.4.2 应用框架层 1.4.3 系统库层 1.4.4 内核层 1.5 小结 练习 第2章 Android开发环境 2.1 ...
Android 教程 Android是一个开源的,基于Linux的移动设备操作系统,主要使用于移动设备,如智能手机和平板电脑。Android是由谷歌及其他公司带领的开放手机联盟开发的
3.1 第一个Android应用程序 3.2 Android项目结构 3.3 APK文件结构 3.4 Android应用程序权限 3.5 Activity及其生命周期 3.5.1 什么是Activity 3.5.2 Activity生命周期 3.6 Intent简介 3.6.1 Intent...
Android移动应用开发期末复习题库(选择题+填空题+编程题) 适合大学专业课期末考试复习刷题
fragment_menu.xml代码: ...import android.app.FragmentTransaction; import android.os.Bundle; public class MainActivity extends Activity { private FragmentTransaction beginTransacti
Android+Studio实战快速高效地构建Android应用,适合实战练习,快速提高编程能力。
android练习 android的初学者必备。
Android sql练习合集.zip项目安卓应用源码下载Android sql练习合集.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
Androidcore是一个Android应用程序,创建该应用程序是为了练习在《 Android开发人员学习指南》中阅读的材料。 Android核心是学习指南中的章节之一。 此应用程序将使用以下功能:吐司,小吃店,通知和工作管理器。 ...
100多个Android的实用开源小应用,包含Android -- 引导页面的实现 Android APP引导页大全 Android Push it单机版事件管理APP Android RecycleView+任意头尾布局+拖拽换位+拖拽删除demo Android sql练习合集 Android ...
这个小程序主要是练习android SQLite的用法,使用SQLite进行数据的添加、查询以及listView上拉刷新和下拉加载功能,核心是用Android写的一个人事档案资料管理程序,希望通过这个程序来演示上述功能的实现,觉得对...
王卫红 Android应用开发基础教程-扩展练习及答案 资源是从华章出版社官网下载的
RemoteDroid是一个Android应用,能够让用户使用自己的无线网络使用无线键盘、触摸屏操作手机。这个项目为开发者提供了如网络连接、触摸屏手指运动等很好的样例。 3、 TorProxy和Shadow TorProxy应用实现了...