初学android的第一个习作
项目源码在这里,因为github上传速度太差,传到了oschina的git托管上。
1.项目结构及技术点
主页面
使用FragmentTabHost,5个标签各对应一个fragment,一个fragment即是一个具体的标签页。如“博客”标签对应的标签页为BlogFragment。
博客标签页
技术点:ListView的使用
技术点:通过Intent启动一个Activity
技术点:使用httpClient和JSON包访问rest api
博客显示页
技术点:使用webview展示网页,网页的html是编程指定的字符串
收藏标签页
收藏显示页
技术点:使用webview展示页面,指定网页的url来加载
便签标签页
技术点:本地数据库的查改操作
技术点:ListView的自定义adapter
技术点:相对布局
便签表单页
技术点:本地数据库的增删操作
技术点:系统服务的调用
管理标签页
技术点:登录页使用本地配置文件保存用户名密码
技术点:登录页的表格布局
收藏管理列表页
技术点:访问rest api的删除操作
收藏管理表单页
技术点:访问rest api的增改操作
2.关于技术点的体会
布局文件是与调用者无关的一个单纯的xml文件,代表一个控件树,类似写在<script type="text/plain">标签中的html片段,只是一段静态文本,被动地等待被调用。调用者会根据这段xml文本中声明的树状结构,在程序中生成控件对象树,控件对象树才是与用户打交道的。
布局方式最常用的是线性布局,可以跨屏幕分辨率良好显示,纵向线性布局嵌套横向嵌套布局,则很像网页的div布局,先从上到下,再从左到右。表格布局很像网页中的table布局,确保同列元素的对齐。相对布局对应的就是网页中脱离文档流的元素,与之不同的是它可以要求控件相对一个兄弟节点。
FragmentTabHost实现的标签页效果作为主页面,其各个标签页都是Fragment,在标签页中进行操作显示的新页面,则是Activity。新页面操作完后在代码中关闭,或者在新页面时用户点击后退,都会让该新页面出栈,返回到上一个页面,如果关闭的页面是表单页,其上一个页面是列表页,则列表页需要在重新显示的时候刷新数据,使用Activity生命周期中的方法。
使用ListView显示列表页,可以使用原始的Adapter,每行显示一段字符串,如果要显示更丰富的信息,需要自定义Adapter和自定义行内布局样式,Adapter使用实体类名作为布局参数,在响应函数里方便地使用下标获得实体做想做的一切。
使用WebView显示网页,可以自己指定网页内容字符串,或者指定一个url让WebView直接加载,前者就像xxDiv.innerHTML="xx",后者则像xxIFrame.src="xx"。相比之下,前者比后者更细腻一点,可以编程决定字符串的内容。当然,能想到的最细腻的方式,是使用Jsoup库控制dom节点,最后产生html字符串给WebView加载。
本地数据,除了最暴力的文件读写外,本地配置文件和本地数据库是可用的选择。前者适合存储一些类似全局变量的数据,但是是持久化的(非持久化的存在public static就好了,例如登录时的token,也可以存在全局上下文里);后者适合存储有类和实体性质的数据,因为可以写SQL,操作方式无限类似jdbc。
远程数据,rest api的访问采用自带的httpClient和JSON库可以方便实现,自己封装了一个简单的工具类,参数非常类似jquery.post等方法,接受路径、参数、成功失败两个callback函数,其中失败指的是服务器返回4xx或5xx状态码,而不是程序中抛出Exception。
关于线程和回调,java web程序员可能不太习惯,在ajax成功后修改页面显示是自然而然的,但是在安卓中,耗时操作如访问api的请求必须放到新线程进行,而新线程不允许修改UI,必须在主线程声明一个Handler,新线程调用该Handler的sendMessage,可以把这个Handler看做回调函数。
3.自学感想和下周任务
在java web的自学时,使用servlet和jdbc实现了增删改查的那天,对自己是个质变,这意味着之后的任何进展,都是在这天的基础上的优化和封装。因为这天的成绩意味着三点,一是具备了对UI的控制力,二是打通了与数据库之间的通道,三是掌握了重要的原生API。(最重要的是,有了控制感和信心)有了这个底子,日后的各种类库和框架,只会越来越简单。
所以这周的进展是比较满意的,虽然页面依然很丑,数据连接方法尚未重构到最优,很多参数和方法还不了解。但达到了战略目的:以原生API实现增删改查的功能,以及对最常用的技术进行摸底。目前项目中没有引入任何第三方库,下个星期的任务,就是把玩最流行的最好的第三方库,通过使用之和阅读源码,来反过来增强对基础API的了解。我java web的学习就是这么过来的。
下个星期的周末,会在github上有个思而勤工作室app2.0版的源码,其中包含对一些好用的第三方库的使用的代码。
上个图?嗯,欢迎点击战国那篇——
apk安装包在这里下载。
初学android的第一个习作的更多相关文章
- 一、Android学习第一天——环境搭建(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第一天——环境搭建 Android 开发环境的搭建 ...
- 20172327 2018-2019-1 《第一行代码Android》第一章学习总结
学号 2018-2019-1 <第一行代码Android>第一章学习总结 教材学习内容总结 - Android系统架构: 1.Linux内核层 Android系统是基于Linux内核的,这 ...
- Android的第一个程序
摘要:对于安卓的历史和安卓需要学习哪些东西以及怎么安卓环境,我就不在这里多说了,网上一大推. 我这里主要说的就是代码.一些基础的安卓知识.在接下来的每个月里我都会不定期写一些博客给初学者学习,我会尽量 ...
- Android零基础入门第17节:Android开发第一个控件,TextView属性和方法大全
原文:Android零基础入门第17节:Android开发第一个控件,TextView属性和方法大全 前面简单学习了一些Android UI的一些基础知识,那么接下来我们一起来详细学习Android的 ...
- android 学习第一天 了解事件机制,页面跳转等常用操作
点击时间2种 第一种,通过初始化页面 写入点击事件 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedI ...
- Android课程---第一课
Android是一种基于Linux的开源的操作系统 主要使用于智能设备,如智能手机.平板电脑和智能电视等 由Google公司领头开发并推广,2008年推出第一个版本. 此系统最初由”安卓之父" ...
- Android 《第一行代码》 第二章练习代码 ActivityTest
FirstActivity.java package com.example.activitytest; import android.app.Activity; import android.con ...
- Android学习第一课
首先看一个android项目中各个包的作用 以下看几个经常使用的控件: 1. TextView 显示文本框控件 2. EditText 输入文本框 TextView控件经常使用属性: id----控件 ...
- 初学Android:意图之intent
Intent意为:意图.简单的理解就是用来从一个Activity/Service跳转到另一个Activity/Service中,并可以携带数据,也可以在这个程序调用别的程序.这样我们虽然不懂如何结息条 ...
随机推荐
- Asp.Net MVC 使用Entity Framework创建模型类
先来说说LINQ to SQL和Entity Framework的区别: LINQ to SQL和Entity Framework都是一种包含LINQ功能的对象关系映射技术.他们之间的本质区别在于EF ...
- boost.compressed_pair源码剖析
意义 当compressed_pair的某一个模板参数为一个空类的时候将对其进行“空基类优化”,这样可以使得compressed_pair占用的空间比std::pair的更小. 参考如下代码: #in ...
- [转]Android 延迟执行
开启新线程 new Thread(new Runnable(){ public void run(){ Thread.sleep(XXXX); handler.sendMessage(); //告诉主 ...
- FragmentActivity和Activity的区别
[转载] 直说总结了: 1.fragmentactivity 继承自activity,用来解决android3.0 之前没有fragment的api,所以在使用的时候需要导入support包,同时继承 ...
- C# BeginInvoke
在用C#编写串口助手时,希望创建线程更新UI,网上有人采用BeginInvoke方法, 这里记录一下使用方法. 参考链接: http://blog.csdn.net/zaijzhgh/article/ ...
- [转]Altium Designer 发现的机密
转载自CrazyBingo博客. 进入电子设个世界,PCB是少不了的东西,刚开始画板子的时候,感觉好神奇.那个时候用的是Altium Designer Summer 08 ,现在用的是Altium D ...
- Inside Kolla - 05 从 tools 目录开始
从 tools 目录开始 在上一篇中已介绍了 Kolla 的源代码目录结构和各个目录中源代码的基本作用,现在开始深入到各个目录,介绍目录中的具体内容.每个人分析代码的思路和方法不同,会选择从不同的目录 ...
- 磁盘空间已满导致rabbitmq无法启动
rabbitmq-server 启动问题 今天遇到一个挺奇怪的 rabbitmq-server 的启动问题. 在内部使用的 openstack 环境上,rabbitmq-server突然就关掉了,无法 ...
- 面向对象编程(七)——Static关键字
Static变量
- [PCL]4 PCL中图像匹配的几个类图
IterativeClosestPoint () { reg_name_ = "IterativeClosestPoint"; ransac_iterations_ = ; tra ...