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

项目源码在这里,因为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并发编程的艺术目录

    第7章:JAVA中的13个原子操作类 第8章:JAVA中的并发工具类 第9章:JAVA中的线程池

  2. JQuery:JQuery操作CSS类

    JQuery:CSS类jQuery - 获取并设置 CSS 类,通过 jQuery,可以很容易地对 CSS 元素进行操作.jQuery 操作 CSSjQuery 拥有若干进行 CSS 操作的方法.我们 ...

  3. 团队冲刺the first day

    2014年5月5号晚上我们团队小组一起做了团队项目.在此期间我们确定了项目的详细计划,,界面的安排,主界面,还有实现的具体功能,在这我就不做赘述了. 本次晚上我们做主界面,把界面和界面之间的调转实现了 ...

  4. Java代码中执行Linux命令,亲测可用

    前提需要知道怎么在linux怎么新建java文件和怎么编译,否则请先学其他知识!! import java.io.*;public class Test{ public static void mai ...

  5. 发送xml或json格式的数据给服务器

    后台通过context.Request.InputStream来接收 #region 发送消息 + void SendMessage() /// <summary> /// 发送消息 // ...

  6. linux设备模型_转

    建议原博文查看,效果更佳. 转自:http://www.cnblogs.com/wwang/category/269350.html Linux设备模型 (1) 随着计算机的周边外设越来越丰富,设备管 ...

  7. ArcBruTile 0.2.2

    在ArcGIS中加载OpenStreetMap和Google.Bing的影像是不是很酷?用ArcBruTile 0.2.2可以实现.安装注册步骤如下.

  8. css页面布局

    写在前面: 页面布局整体上可以分为两类:固定宽度(一般固定960px):流式布局:将流式布局转换为固定布局很容易,只需要外围再包括一个div,为其设置宽度即可. html默认的布局方式是将每个块状标签 ...

  9. defer 要放在return之前

    虽然defer可以在函数退出的时候执行,但是也要把它放在return之前,否则不会调用到. 错误的示范: res, err := Resource.open() if err != nil { ret ...

  10. MySQL Replication的相关文件

    1.master.info文件 位于slave端的数据目录下,存储slave连接到master的相关信息,如,master主机地址.连接用户.密码.端口.已经获取的日志信息. 复制过程中修改.删除ma ...