手机上的GMail客户端升级至1.5.0版本

me使用摩托罗拉A1200的时候,曾经介绍过GMail移动客户端的使用情况,还图文并茂的做了深入报道。但去年me换成A780用后,这个移动客户端程序居然只能安装,但无法运行,具体症状是程序根本启动不了。不明其所以然,这个事情就放下了,me用的最多的仍然是用Opera Mini阅读Google Reader移动版

上个月换用A1600,把应用程序搞定后又想到了这个GMail Client jar。用手机上网登录到 http://gmail.com/app ,显示如下:

From phone_cut

居然把me的摩托罗拉A1600识别成Toshiba WX320T(也不知道是啥玩意儿),me的手机可是行货啊。没办法,只好用电脑登陆到 http://gmail.com/app ,发现不可以直接下载安装需要的jar程序文件,它要求输入美国或英国的电话,然后通过短信发下载链接给你。靠,这哪儿有啊。在网上Google了下,找到了直接下载的方法,下载安装,一切OK。下面秀几幅图给大家看看:

From phone_cut
From phone_cut
From phone_cut
From phone_cut

以上是主要界面,提供的菜单功能有动作(Action)、去到(Go to)、搜索(Search)、写邮件(Compose)、退出(Exit),前两个是主功能,很丰富的。需要提醒的是在Go to界面中有Settings,可以设定Go to中出现的标签(上图绿色的是me自己选的)。

再看看邮件会话的界面:

From phone_cut
From phone_cut

阅读邮件的操作很简单,通过A1600的摇杆可以轻松完成,自己试试吧。

再看看帮助和关于:

From phone_cut

确实无法识别手机型号和平台。

无法识别手机型号问题是因为万恶的中国移动强行屏蔽了手机登录网络是发出的User Agent导致网站无法正确识别,请见这里

几点总结和说明:

1、此版本(1.5.0)支持触屏,当然精确操作还是笔和摇杆。

2、支持对图片、word文档和pdf文档附件的直接查看。

3、如果联系人登记了电话号码,可以在程序中直接呼叫。

因为Google官方网站不给我们提供直接下载jar程序的地址,me把它上传上来供大家下载:gmail-g150

JAVA笔记-09-数据库编程(JDBC)

660

  1. 几乎任何实用级别的程序都和数据库有点关系。
  2. JDBC来源于ODBC(Open Database Connectivity),后者是通过代码存取数据独立的形式简化数据库编程的一种技术。JDBC也差不多,允许撰写和数据库无关的代码,这样就可以使代码不但和JVM无关,海河某个具体的数据库无关。
  3. JDBC集成在J2SE中,存放在java.sql和javax.sql中。
  4. JDBC的功用主要为联接数据库、送出SQL语句并执行、处理反馈的结果集。
  5. JDBC驱动可以分为4类:驱动类型1,桥接式驱动,来源于ODBC,现在已经很少用;驱动类型2,本地API驱动,转换为本地调用,一般是 数据库厂商提供的,分发部署数据库的时候需要这些本地代码;驱动类型3,JDBC-NET驱动,转换为数据库无关的网络协议调用,好处在于不需要客户端提 供任何东东,并且同一个驱动可以用于多个数据库,一般是通过中间件来实现的,第三个厂商往往提供这种类型的驱动;驱动类型4,本地协议驱动,直接转换为本 地代码对数据库进行调用,是纯JAVA的驱动,数据库厂商一般提供的都是这种驱动。
  6. 只存取一种类型的数据库,比如Oracle、Sybase、IBM,一般用驱动类型4;如果您的程序同时存取多种类型的数据库,推荐使用驱动类型3;加入3和4都不存在,一般就只能用驱动类型2了;驱动类型1一般不用来在发布程序的时候使用,仅仅用在开发阶段或测试阶段。
  7. 使用DriverManager(位于java.sql)联接数据库:使用驱动类型1的时候需要手动加载相关驱动,语句如 Class.forName (“sun.jdbc.odbc.JdbcOdbcDriver”);;url类似于jdbc: :<>
  8. 使用DataSource联接数据库:url类似于jdbc//;使用此方法需要绑定数据库,一般需要通过属性文件来定义。
  9. SQL(结构化可查询语言)的常规操作有CRUD,分别指构建、读取、更新、删除。
  10. 通过DriverManager或DataSource建立Connection后可以呼叫SQL语句,分为三种Statement(没有参 数的语句)、PreparedStatement(预编译的SQL语句,带有参数,在执行前需要设定)、CallableStatement(数据库中的 已存储过程)。

JAVA笔记-08-异常

360

  1. 异常的来源:用户误操作,程序漏洞,物理资源问题。
  2. 每一级调用的信息都存储在堆栈(stack)中,对于异常,如果当时不能处理则需明确转到上一级去,一直到main()。
  3. 异常有三种:可检查的异常,运行时异常,错误;这些都继承自Throwable,前两个继承自Exception,第三个继承自Error。除了那些继承自RuntimeException的异常,其他都属于可检查的异常。
  4. 对于try catch组合如果catch有多个,则按照顺序依次向下检验,所以级别高的如Exception类的不能放在顶端,否则后面的检查都不会进行了。
  5. 处理和宣告异常的规则:很简单,就是异常必须被处理,或者声明后再次送出。
  6. try catch创建一片受保护的代码区,最后可以用finally进行保底操作。受保护的话需要消耗更多的资源,因此要注意使用效率。
  7. throws适用方法,throw则是抛出异常的语句。
  8. 继承过程中子类中的方法不能抛出比父类更多的异常或种类,只能比父类少。
  9. 用户自定义的异常必须继承自java.lang.Throwable。

JAVA笔记-07-接口

326

  1. 接口是一系列抽象方法的集合,类可以通过集成接口中的抽象方法实现(implements)接口。
  2. 接口和类相同的方面:可以包含任意数量的方法;是一个后缀名为.java的文件,接口名称和文件名称必须一致;接口的bytecode码编译后保存在.class文件中;包和命名空间管理方式和类完全相同。
  3. 接口与类不同的方面:对于接口不能直接实例化;接口中没有构建器;接口中的所有方法都是抽象的;接口中不能有实例相关的field,仅有声明为static和final的field才能在接口中存在;接口不能被类继承而是被实现;一个接口可以继承自多个接口。
  4. 类描述了对象的属性和行为,而接口仅包含类需要实现的行为(behavior)。
  5. 接口的一些特性:接口默认是抽象的,不需要显性用abstract;接口中的方法也默认是抽象的;接口中的方法默认是public存取权限。
  6. MouseListener接口继承自EventListener,后者不包含任何方法,仅起到标签的作用,这种就是所谓的tagging interface。
  7. 接 口的两种重要用法:暴露出类中的某些方法,使类的使用者可以通过这些方法和类进行交互操作;强制使实现接口的类有固定特征的行为和表现。前者一般是把某些 特定的行为聚类在一起构成一个接口,比如Payable,然后对之进行相应的操作,是类已经存在了,把一类方法抽象出来,而后者则是方法已经有了,强制是 某个类实现以拥有某种特定的性能。
  8. 接口可以继承自多个不同的父接口。
  9. public class Dog extends Mammal implements Playable;Dog是Dog,也是Mammal,也是Playable,也是Object。多型是OOP的典型属性,也有很多用途。

JAVA笔记-06-集合

278

  1. 阵列(array)的特点:每个元素必须是相同类型的;可以通过索引区别并存取;第一个元素的索引为0;另外,数列的长度是不可更改的。
  2. 声明和实例化的方式:double[] temps = new double[31];初始化后每个元素的值都是0.0。
  3. 每个阵列引用都是对象,所以才有temps.length的用法。
  4. 阵列共有9种类型:8种基础类型(byte、char、short、int、long、float、double、boolean)和对对象的引用。
  5. Employee[] teams = new Employee[500];配置空间,但没有实例化。
  6. 阵列直接初始化只能用在刚声明的时候,比如int[] tmps = {1,5,3};
  7. arraycopy()函数可以完成阵列之间的转移、截取等操作;该函数可直接调用。
  8. JAVA集合框架三大基础分类:列表(List)、集合(Set)、映射(Map)。
  9. List用索引存取,允许重复元素和null元素,常用的有阵列(array)、向量(vector)、ArrayList和LinkedList。
  10. 集合不允许重复元素出现,常用的有HashSet、TreeSet、LinkedHashSet等。
  11. 映射中的每个元素都包含一对键值(key,value),其中key必须是唯一的,常用的有Hashtable、HashMap、IdentiryHashMap、TreeMap、WeakHashMap。
  12. 向量Vector有两个属性:容量和步长;假如步长为0,则需要扩容是仅简单的倍增。
  13. Vector 的方法:add,添加元素;addAll,添加某集合的全部元素;clear,清空;removeAll,清除指定集合中的所有元素(假如包含的话); retainAll,保留指定集合中的元素,其它的清除;setElementAt,添加元素,并把指定位置之前的所有元素清除。
  14. Vector的长处在于可以作为可变阵列使用,缺点在于效率过低,因为每次增删元素都要变动大部分元素的位置。
  15. Hashtable是一种映射键值到值的数据结构,hash是为了确定元素的唯一性。
  16. List和Hashtable分别有不同的特点和适用情况:List因为采用下标索引的方式,查询速度非常快,但每次增删需要挪动很多元素,效率很低;Vector因为采用链接的方式,增删数据效率很高,但查询速度一般。