0%

五大布局

  1. LinearLayout 线性布局

  • android:orientation=”vertical/horizontal” 子类控件排列方式
    vertical 垂直
    horizontal 水平
  • android:gravity=”center/right/left…”子类控件位置
    center_horizontal 水平居中
    center_vertical 垂直居中
    可以同时设置多个属性,如bottom|center_horizontal,设置子类控件位于底部的中央
  • 子控件可以通过设置android:layout_orientationandroid:layout_gravity来控制位置
  • 子控件通过android:layout_weight来设置控件的占比。
    android:layout_weight真实含义是:一旦View设置了该属性(假设有效的情况下),那么该 View的宽度等于原有宽度(android:layout_width)加上剩余空间的占比!

    Google官方推荐,当使用weight属性时,将width设为0dip即可,效果跟设成wrap_content是一样的。这样weight就可以理解为占比了!

  1. RelativeLayout 相对布局

全局属性


  • android:layout_alignParentLeft="true" 子类控件相对当前父类容器靠左边
  • android:layout_alignParentTop="true" 子类控件相对当前父类容器靠上边
  • android:layout_marginLeft="41dp" 子类控件距离当前父类容器左边的距离
  • android:layout_marginTop="41dp" 子类控件距离当前父类容器上边的距离
  • android:layout_centerInParent="true" 子类控件相对当前父类容器水平垂直居中
  • android:layout_centerHorizontal="true" 子类控件相对当前父类容器水平居中
  • android:layout_centerVertical="true" 子类控件相对当前父类窗口垂直居中

子控件属性


  • android:layout_below="@+id/" 该控件位于给定id控件的底部
  • android:layout_toRightOf="@+id/" 该控件位于给定id控件的右边
  • android:layout_above="@+id/" 该控件位于给定id的上面
  • android:layout_toLeftOf="@+id/" 该控件位于给定id的左边
  • android:layout_alignBaseline="@+id/" 该控件的内容与给定id控件的内容在一条线上
  • android:layout_alignBottom/android:layout_alignLeft/android:layout_alignRight/android:layout_alignTop 该控件的底部与给定id控件的[底部/左边/右边/顶部]边缘对齐
  1. FrameLayout 帧布局

  2. AbsoluteLayout绝对布局

  • 又叫坐标布局,可以直接指定子控件的绝对位置(xy)
  • android:layout_x/android:layout_y
  1. TableLayout 表格布局

全局属性


  • TableLayout以行列的形式管理子控件,每一行为一个TableRow对象,也可以是一个View对象
  • android:collapseColumns="1,2"隐藏从0开始的索引列,多列用逗号分隔
  • android:shrinkColumns="1,2"收缩从0开始的索引列
  • android:stretchColumns="1,2"拉伸从0开始的索引列,*表示所有列

子控件属性


  • android:layout_column 第n列
  • android:layout_span 占据列宽

  1. 按钮点击事件监听方式

  • 匿名内部类监听

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       btn.setOnclickListener(new OnClickListener() {
    });```

    - 外部类监听

    ```java
    btn.setOnclickListener(myListener);

    class myListener implements OnClickListener {
    }
  • 实现接口监听

    1
    2
    3
    4
    5
    6
    7
    public class MainActivity extends Activity
    implements OnclickListener {
    @Override
    public void Onclick(View v) {
    }
    }
    btn.setOnClickListener(this);
  1. dp/dip/sp/px区别

  2. AutoCompleteTextView/MultiAutoCompleteTextView

  3. ToggleButton

  4. CheckBox

  5. RadioButton/RadioGroup

  1. 基础环境

    • JDK(1.6+)
    • Android SDK
    • Eclipse(ADT)
  2. 目录结构

    • src 源码目录

    • gen/中存放系统自动生成的配置文件

    • assets/存放资源文件,不会自动生成id且不会自动占用空间(不允许下级文件夹)

    • bin/存放应用被编译后生成的class文件、apk文件

    • res/存放应用用到的所胡资源,如图片布局等等

      • res/drawable/存放不同分辨率屏幕下的图片资源
      • res/layout/存放布局文件
      • res/values/存放字符串、主题、颜色、样式等资源文件
      • res/raw
    • libs/存放jar包

    • AndroidManifest.xml清单文件,配置应用相关信息,包括包名,权限,程序组件等等

  3. TextView文本显示控件

    • android:id id名称
    • android:layout_width 控件宽度
      • wrap_content 以包含的内容宽度作为控件宽度
      • fill_parent(2.3以前)/match_parent(2.3以后使用) 当前控件宽度铺满父类容器宽度
    • android:text 控件文本内容
    • android:textSize 文本大小
    • android:textColor 文本颜色
  4. EditText 文本输入控件

    • android:hint 提示文本
    • android:inputType 文本输入类型
  5. Error:Error retrieving parent for item: No resource found that matches the given name ‘Theme.AppCompat.Light’.原因:未安装appcompat_v7支持sdk库

  6. ImageView 显示图片控件

    • android:src = "@drawable/PATH" 图片路径
    • android:background = "@drawable/PATH" 背景图片路径
  7. Button/ImageButton

    • Button可以通过android:text设置按钮要显示的文本
    • ImageButton可以通过android:srcandroid:background设置图片和背景图片

以下笔记内容来自《PHP与MySQL动态网站开发(第4版)》

  1. 对于几乎所有的数据库应用程序都是如此:
    • 文本(即字符串)
    • 数字
    • 日期和时间
  2. 存储为CHAR的任何内容将总是被存储为具有列长度的字符串(使用空格填充它;在从数据库中检索存储的值时将删除这些空格)。
  3. 如果你在使用非整形时需要绝对精度,DECIMAL要比FLOATDOUBLE合适。
  4. 当发生INSERTUPDATE时,会自动把TIMESTAMP字段类型设置成当前日期和时间,即使没有为那个特定的字段指定任何值。如果一张表具有多个TIMESTAMP列,那么在执行INSERTUPDATE时,只会更新其中的第一个列。
  5. DESCRIBE tablename语句与SHOW COLUMNS FROM tablename语句等价。
  6. 当在SQL语句中使用任何函数时,不要用引号括住它。
  7. 你偶尔会在SQL命令中看到使用反绰号(`)。这个字符与波浪符(~)是同一个键,它与单引号不同。反引号用来安全地引用可能与已存在的MySQL关键词重复的表名或列名。
  8. INSERT中一个有意思的变化是REPLACEREPLACE语句的作用是,如果使用的表的主键或唯一索引的值已经存在,那么REPLACE会更新存在的行;如果不存重复则会同INSERT一样插入新行。
  9. MySQL支持关键字TRUEFALSE,不区分大小写。在内部,TRUE等于1而FALSE等于0。因此,TRUE+TRUE=2
  10. 带有LIKE条件语句的查询一般比较慢,因为它们不能利用索引,所以仅当绝对需要时才应该使用这种格式。
  11. 为了在LIKENOT LIKE查询中使用原意的下划线或百分号,需要对它们进行转义(在字符前放置一个反斜杠),使得不会把它们与通配符相混淆。
  12. FULLTEXT查找通常比LIKE查询要好一些。
  13. 如果有一个gender列,定义为ENUM('M','F'),子句ORDER BY gender返回的结果是M记录在前。
  14. 应该从来都不需要在主键列上执行一个UPDATE,因为这个值应该从不发生变化。更改主键的值可能造成严重的后果。
  15. 即使SELECT查询只返回一行,也要格外小心,将LIMIT 1子句添加到DELETE查询中。
  16. 如果创建的主键没有任何其他意义和目的,就称其为代理主键
  17. MySQL只允许每个表有一个主键,虽然你可以让主键基于多列(这表示这些列的组合必须唯一且永远不变)。
  18. 理想情况下,主键应该是整数,使MySQL性能更佳。
  19. 第一范式(1NF):
    - 每一列必须仅包含一个值(有时候这被描述为原子性不可分割性);
    - 所有表都不能具有相关数据的重复列。
  20. 如果内联结中引用的列值为NULL,则永远不会有返回值,因为没有值会匹配NULL,包括NULL。
  21. 左联结要考虑的最重要的内容是首先指定哪个表。
  22. SQL可以执行自联结:让表自己联结自己。
  23. 你可以通过database.table.column语法跨库执行联结,条件是所有数据库都在同一服务器上(不能跨网络),并且使用联结的用户需要有权限访问所有涉及的表。
  24. NULL是一个特殊的值,有趣的是GROUP BY将会NULL值分到同一组,因为他们有相同的空值。
  25. 另一个相关的子句是HAVING,它类似竽一个组的WHERE条件。
  26. 不能将SUM()AVG()直接应用于日期或日间值。你需要将日期和时间值转换为秒,执行SUM()AVG()函数,并且然后将这个值换回日期和时间。
  27. IFNULL()函数有时可以用来代替COALESCE()。它的语法是:
    IFNULL(value,reutnr_if_null)
    如果第一个参数是一个指定列,包含NULL值,那么将返回第二个参数。如果参数不包含NULL值,则返回该参数的值。
  28. FULLTEXT搜索需要FULLTEXT索引,这种类型的索引,只能在MyISAM表中创建。如果50%以上的记录与关键字匹配,则不会返回记录。
  29. OPTIMIZE TABLE tablename
    在通过ALTER命令改变表或对表进行了大量的删除操作后,在记录之间会留下虚拟的间断,而运行这个命令可以 优化数据库。
    其次,你可以偶尔使用ANALYZE命令:
    ANALYZE TABLE tablename
    执行此命令更新表中的索引,从而改善它们在查询中的使用情况。每当存储表中的数据发生批量更改的时候(例如,通过UPDATEINSERT命令)可以执行这个命令。
  30. 数据库优化
    数据库的性能主要依赖于它的结构和索引。创建数据库时尽量:
  • 选择最佳的存储引擎;
  • 尽量为每列使用最小的数据类型;
  • 尽可能定义不可为空(NOT NULL)的列;
  • 为主键使用整数;
  • 明智而谨慎地定义索引,选择正确的类型应用到恰当的一列或多列;
  • 如果可能的话限制索引为固定数目的字符;
  • 避免创建太多的索引;
  • 确保作为联结基础的列是相同的类型,如果是字符串的话,使用相同的字符集和校对规则。

今天第一天上班,工作就是熟悉一下环境。

svn checkout下来代码以后,就准备跑。结果tomcat报jdbc连接不到数据库。

1
2
3
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver
has not received any packets from the server.

然后网上各种wait_timeout啊,connect url写错,mysql启动参数多了–skip-networking等等,但试过都没用。

然后我就开始一下午的逐个排查。

整个结构:

  • IDE问题
  • tomcat问题
  • mysql-java-connector-5.1.x.jar包问题
  • 代码问题[ssh2框架]
  • mysql问题

解决:

  1. IDE用的MyEclipse,于是下个Eclipse for JavaEE,运行结果依旧。
  2. tomcat版本7.0,不管这个,直接写个java类,在main方法里通过jdbc连接mysql,这样代码的问题也排除了。运行结果还是一样报错。
  3. 从官网下载最新的connector/J驱动,加载,还是有问题。
  4. mysql用的32位5.5版本,但系统是64位的,虽然通过IDE运行代码报错,但第三方工具比如navicat for mysql可以连接到本地mysql,用命令行也可以。暂时不管,再下64位5.5版本mysql。运行代码还是报错。

这个就没辙了。环境基本都换新了。也不会出现wait_timeout参数这一类问题。

最后,求助同事。同事看了下,表示他那边运行相同代码没问题。 这时候,我突然想到jdk版本来了。于是问他机器jdk版本多少。他说是jdk6。

好吧。这时候,我只好最后试一试,下了jdk6u38,再重新编译。运行代码,顺利连上mysql,并获取数据。

好吧,原因我也不知道,可以这台电脑装的jdk7有问题。记在这里。

以前从没用过jdk7,新入职,这台电脑正好装的jdk7,居然就碰上这么匪夷所思的问题。 花费了一下午的时间。晕。

  1. 第一范式:表中不要重复意义的列,每列的值应当有原子性,不可再拆分。
  2. 第二范式:数据库表中的每一列都要和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
  3. 第三范式:数据库中的非键列必须相互之前没有关系,完全独立。如果改变一列中的值需要改变另外一列的值,那就是违反了第三范式。

  1. 变量是否为NULL,用isset($var)来判断;变量如果为0,False,NULL,’’,用empty($var)判断。这两个都不是函数,而是系统自带的结构。不属于函数。

  2. 包含文件有4种写法

    • include('/path/to/file')

    • require('/path/to/file')

    • include_once('/path/to/file')

    • require_once('/path/to/file')

其中*_once的表示被包含文件只包含一次,不管被包含了几次(可能不小心这样。。。。。)。include包含文件如果不存在,会抛错误,但会继续执行脚本;require包含文件,会抛错误,然后停止执行脚本。

  1. to be continued.