首发:个人博客,更新&纠错&回复

项目源码在这里,因为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安装包在这里下载。

长期欢迎项目合作机会介绍,项目收入10%用于酬谢介绍人。新浪微博:@冷镜,QQ:908789432

初学android的第一个习作的更多相关文章

  1. 一、Android学习第一天——环境搭建(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第一天——环境搭建 Android 开发环境的搭建 ...

  2. 20172327 2018-2019-1 《第一行代码Android》第一章学习总结

    学号 2018-2019-1 <第一行代码Android>第一章学习总结 教材学习内容总结 - Android系统架构: 1.Linux内核层 Android系统是基于Linux内核的,这 ...

  3. Android的第一个程序

    摘要:对于安卓的历史和安卓需要学习哪些东西以及怎么安卓环境,我就不在这里多说了,网上一大推. 我这里主要说的就是代码.一些基础的安卓知识.在接下来的每个月里我都会不定期写一些博客给初学者学习,我会尽量 ...

  4. Android零基础入门第17节:Android开发第一个控件,TextView属性和方法大全

    原文:Android零基础入门第17节:Android开发第一个控件,TextView属性和方法大全 前面简单学习了一些Android UI的一些基础知识,那么接下来我们一起来详细学习Android的 ...

  5. android 学习第一天 了解事件机制,页面跳转等常用操作

    点击时间2种 第一种,通过初始化页面 写入点击事件 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedI ...

  6. Android课程---第一课

    Android是一种基于Linux的开源的操作系统 主要使用于智能设备,如智能手机.平板电脑和智能电视等 由Google公司领头开发并推广,2008年推出第一个版本. 此系统最初由”安卓之父" ...

  7. Android 《第一行代码》 第二章练习代码 ActivityTest

    FirstActivity.java package com.example.activitytest; import android.app.Activity; import android.con ...

  8. Android学习第一课

    首先看一个android项目中各个包的作用 以下看几个经常使用的控件: 1. TextView 显示文本框控件 2. EditText 输入文本框 TextView控件经常使用属性: id----控件 ...

  9. 初学Android:意图之intent

    Intent意为:意图.简单的理解就是用来从一个Activity/Service跳转到另一个Activity/Service中,并可以携带数据,也可以在这个程序调用别的程序.这样我们虽然不懂如何结息条 ...

随机推荐

  1. Java学习-028-JSON 之二 -- 数据读取

    JSON数据由 JSONObject.JSONArray.key_value 组合而成.通常来说,JSONObject 可以包含 JSONObject.JSONArray.key_value:JSON ...

  2. Notepad++ install vi plugin

    下载Notepad++,想安装vi插件. 使用Notepad++自带的插件管理器下载visimulator失败. 所以直接下载插件visimulator.dll,再导入. 下载地址: https:// ...

  3. mybatis的xlm的sql

    <sqlMap namespace="egis.scms.order">    <typeAlias alias="ScmsOrderDTO" ...

  4. vertical-align的理解

    vertical-align的理解 定义和用法 vertical-align 属性设置元素的垂直对齐方式 该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐 也就是说 它只是个适用行内元素的属 ...

  5. Mybatis的分页插件PageHelper

    Mybatis的分页插件PageHelper 项目地址:http://git.oschina.net/free/Mybatis_PageHelper  文档地址:http://git.oschina. ...

  6. http://blog.csdn.net/foreverling/article/details/51385128

    http://blog.csdn.net/foreverling/article/details/51385128

  7. http://blog.sina.com.cn/s/blog_6940cab30101hn9j.html

    http://blog.sina.com.cn/s/blog_6940cab30101hn9j.html

  8. windows server 2008服务器IIS绑定阿里云域名

    一.打开Internet 信息服务(IIS)管理器   二.将你的网站放到服务器目录下,比如D盘下的WWW文件夹.   三.在IIS中,添加网站,网站的物理路径指向第二部中创建的网站.   五.在绑定 ...

  9. iOS FMDB官方使用文档 G-C-D的使用 提高性能(翻译)(转)

    由于FMDB是建立在SQLite的之上的,所以你至少也该把这篇文章从头到尾读一遍.与此同时,把SQLite的文档页 http://www.sqlite.org/docs.html 加到你的书签中.自动 ...

  10. Android大图片裁剪终极解决方案(上:原理分析)

    转载声明:Ryan的博客文章欢迎您的转载,但在转载的同时,请注明文章的来源出处,不胜感激! :-)  http://my.oschina.net/ryanhoo/blog/86842 约几个月前,我正 ...