安卓开发之Activity

一、Activity的作用

Activity作用就是和用户进行交互;

Activity间接或者直接集成Context、ContextWrapper、ContextTheme、Wrapper等基类

有的时候Activity只用集成Activity的子类(——代表子类)

AccountAuthenticatorActivity实现账户管理界面

ActivityGroup——TabActivity实现Table界面

ListActivity,实现列表界面

——LauncherActivity一个列表项对应一个Activity

——PreferenceActivity实现程序参数设置、存储界面

AliasActivity启动其他Activity结束自己

ExpandableListActivity实现可展开列表界面

FragmentActivity多ui界面

NativeActivity 使用C/C++在NDK环境中处理Activity的生命周期

Continue reading

安卓开发之调试程序

一、DDMS中LogCat(这样就能调试程序了)

代码下方显示LogCat,windows/show view/other选中logcat点击ok就会在代码下面显示logcat窗口

  1. 添加过滤器

Logcat Message Filter Settings

Filter Name自定义

by Log Tag就是匹配内容(比如:System.out)这样就过滤出带有这样的内容会显示在日志中

by Log level是错误级别(一般选择全部verbose)

  1. 查看异常Error

其中android开头是android内部包,com开头的也是内部的,java也是自带的,dalvik是虚拟机的包。所以只用看你自己的包error就可以了

二、DDMS中File Explorer(这样电脑的文件和虚拟机文件就可以互通了)

1.添加文件到AVD中

push a file onto the device

2.从AVD中导出文件到电脑中

pull a file from the device

二、使用Log调试

Log类中带有verbose、debug、info、warn、error、assort等方法(分别用首字母表示)

 

安卓开发之SQLite数据库操作

一、SQLiteDatabase对象

获取SQLiteDatabase对象可以使用SQLiteOpenHelper或者使用静态方法获取(具体内容可以参考开发手册)

//使用SQLiteOpenHelper可以获取

DatabaseHelper dbHelper = new DatabaseHelper(Sqlite.this,

“sqlite_joyous_db”);

SQLiteDatabase  db = dbHelper.getReadableDatabase();

//或者使用静态方法获取

SQLiteDatabase  db = SQLiteDatabase.openOrCreateDatabase(“/data/data/study.sqlite/databases/sqlite_joyous_db”, null);

其中使用SQLiteOpenHelper需继承SQLiteOpenHelper,使用静态方法中参数中study.sqlite是包名,sqlite_joyous_db是数据库名

Continue reading

安卓开发之布局

一、LinearLayout(线性布局

android:orientation=”horizontal”(从左到右)

android:orientation=”vertical”(从上到下)

二、TableLayout(表格布局

android:stretchColumns=”1″  设置第2列作为拉伸列(注意0表第一列)

  1. TableLayout添加一个TableRow就可以增加一行,在tablerow中添加组件就占用一列
  2. 如果直接在tableLayout中添加组件那么他独自占用一行
  3. 设置拉伸stretchColumns、压缩shrinkableColumns、隐藏collapseColumns可以参考上面的拉伸列设置

Continue reading

安卓开发常用快捷键

快捷键               功能                              范围
ctrl + shift + o    自动导入相关包           Java编辑
ctrl+shift+f         格式化代码                  Java编辑
Alt+shift+s         资源快捷键(可以查看重载方法等) Java编辑
ctrl+/                 添加取消注释               Java编辑
ctrl+1                自动修正(比如去掉一些烦人的警告) 全局
ctrl+D                删除当前行                  全局
Ctrl+Q               定位到最后编辑的地方 全局
ctrl+L                定位到某一行 全局
ctrl+F               查找 全局
ctrl+Z               取消 全局
Alt+?             上下文信息(写代码速度是不是提高很多) 全局

xml中添加注释<!–这里是注释–>使用ctrl+shilf+?

PS:其他快捷键点击下载Eclipse编辑相关快捷键(Android开发必备)

Eclipse设置背景色和字体大小

一、设置Eclipse代码编辑背景色(保护自己从这里开始)

1、打开window / Preference,弹出Preference面板
2、展开General标签,选中Editors选项,展开。
3、选中 Text Editors,右边出现TestEditors面板。 面板中有这样一个选项:Appearance color options
;其中是各种板块颜色的设置,其中有一项是background color,勾掉System Default,点击’color’,弹出
颜色选择面板,选择喜好的颜色,单击确定。
注:背景颜色眼科专家推荐:色调85,饱和度,123,亮度205。文档都不再是刺眼的白底黑字,而是非常柔
和的豆沙绿色,这个色调是眼科专家配置的,长时间使用会很有效的缓解眼睛疲劳保护眼睛。
二、设置Eclipse字体大小

Java文件字体大小设置

Window / Preferences / General / Appearance / ColorsAnd Fonts ,在右边的对话框里选择Java –
Java Editor Text Font,点击出现的编辑(Edit)按钮,可以设置显示在在主窗体中程序的字体大小,设置
完之后点击右下角的应用(Apply),最后点击确定(OK)即可。
XML文件字体大小
window / preferences / General / appearance / colors and fonts / Basic / “Text font ” ,然后点
击Edit,可以设置字体的大小

设置同样单词自动选中

Window”-“preferences”-“Java”-“Editor”-“Mark Occurrences”

多表查询经典例子

create table students (sid char(8) primary key not null comment ‘学号’,name varchar(20) not null comment ‘学生姓名’,sex char(2) not null comment ‘性别’)engine=myisam default charset=utf8
insert into students (sid,name,sex) values (‘20130001′,’张三’,’男’);
insert into students (sid,name,sex) values (‘20130002′,’赵四’,’男’);
insert into students (sid,name,sex) values (‘20130005′,’李四’,’男’);
insert into students (sid,name,sex) values (‘20130006′,’小红’,’女’);
insert into students (sid,name,sex) values (‘20130004′,’小燕’,’女’);
insert into students (sid,name,sex) values (‘20130007′,’苍老师’,’女’);

create table scourse (cid int(8) primary key auto_increment comment ‘课程号’,
cname varchar(20) not null comment ‘课程名称’,
scredit float(10,2) not null comment ‘该课程学分’
) engine=myisam default charset=utf8

insert into scourse (cname,scredit) values (‘C语言’,6);
insert into scourse (cname,scredit) value (‘计算机编程’,7);
insert into scourse (cname,scredit) value (‘计算机应用’,10);
insert into scourse (cname,scredit) value (‘C++’,10);
create table sc (sid char(8) not null comment ‘学号’,cid int(8) not null comment ‘该学生选择的课程号’,score float(10,2) null comment ‘该学生该课程实际得分’) engine = myisam default charset =utf8
insert into sc (sid,cid,score) value (‘20130001’,1,5);
insert into sc (sid,cid,score) value (‘20130001’,3,8);
insert into sc (sid,cid,score) value (‘20130001’,4,9);
insert into sc (sid,cid,score) value (‘20130004’,1,2);
insert into sc (sid,cid,score) value (‘20130004’,3,2);
insert into sc (sid,cid,score) value (‘20130004’,2,6);
insert into sc (sid,cid,score) value (‘20130002’,3,6);
insert into sc (sid,cid,score) value (‘20130005’,4,6);
insert into sc (sid,cid,score) value (‘20130007’,1,6);
insert into sc (sid,cid,score) value (‘20130006’,3,6);
insert into sc (sid,cid,score) value (‘20130003’,2,7);

附件:多表查询

zend framework项目分组(初级版)

Zend_Controller_Front 控制了Zend_Controller系统的整个工作流。它是前端控制器(FrontController)模型的解释。Zend_Controller_Front处理所有由服务器接收的请求并负责把请求派发给动作控制器

Zend_Controller_Request_Abstract (often referred to as the Request Object)描述请求环境和提供设置和读取控制器和动作名字以及任何请求参数的方法。另外它跟踪它所包含的动作是否被Zend_Controller_Dispatcher派遣。抽象请求对象的扩展可被用来封装整个请求环境,为了设置控制器和动作的名字,它允许路由器从请求环境中读出信息。
缺省地,Zend_Controller_Request_Http被用来访问整个HTTP请求环境。

Zend_Controller_Router_Interface用来定义路由器。路由是个过程,在这个过程中它通过检查请求环境来决定哪个个控制器和哪个控制器中的动作应该接受请求。控制器、动作和可选的参数就通过Zend_Controller_Dispatcher_Standard处理来设置在请求对象中。路由只发生一次:在最初收到请求并在第一个控制器被派遣之前。 缺省路由器,Zend_Controller_Router_Rewrite,从Zend_Controller_Request_Http取出URI的终点作为参数并基于在url中的路径信息分解成控制器、动作和参数。作为一个例子,URL http://localhost/foo/bar/key/value将被解析为foo控制器、bar 动作和带有一个值value的参数key。
Zend_Controller_Router_Rewrite也可以用来匹配任意的路径

Zend_Controller_Dispatcher_Interface被用来定义派遣器。派遣是个过程,在这个过程中它从请求对象中取出控制器和动作并映射它们到控制器文件/类和在控制器中的动作方法。如果控制器和动作不存在,它派遣缺省的控制器和动作。

实际的派遣过程包括初始化控制器类和在这个类中调用动作方法。不像路由,只发生一次,派遣是循环发生的。如果请求对象的派遣状态在任何点上重置,循环将被重复,调用不论哪个当前在请求对象中的动作。第一次循环随请求对象的派遣状态设置(布尔 true)完成,它将完成处理。
缺省的派遣器是Zend_Controller_Dispatcher_Standard。它定义控制器为以Controller结尾的 MixedCasedClasses,并且动作为以Action结尾的camelCasedMethods:FooController::barAction()。在这个例子中,控制器是foo,动作是bar

Zend_Controller的工作流相当简单。请求被Zend_Controller_Front接收,然后它调用Zend_Controller_Router_Rewrite来决定哪个控制器(和控制器中的动作)被派遣。为了在请求中设置控制器和动作名字Zend_Controller_Router_Rewrite分解URI。Zend_Controller_Front接着进入一个派遣循环。它调用Zend_Controller_Dispatcher_Standard,传递给它请求,派遣在请求(或使用缺省的)中指定的控制器和动作。在控制器完成之后,控制返回到Zend_Controller_Front。如果控制器通过重置请求派遣状态指示其它的控制器应该被派遣,循环将继续并且其它派遣被执行。否则,处理结束。

搞了半天,终于分组成功了
resources.frontcontroller.moduledirectory = APPLICATION_PATH “/modules”
resources.frontcontroller.defaultModule = “default”
resources.frontController.controllerDirectory = APPLICATION_PATH “/controllers”

然后默认的模块是default而文件夹布局是:


这样在admin控制器需要这样写:

class Admin_IndexController extends Zend_Controller_Action
{
public function indexAction()
{
echo ‘这里是admin模块下的index控制器下的index方法’;
exit();
}
}

这样访问:localhost就会默认访问default下的index控制器
而访问localhost/admin就会访问admin文件夹下控制器
PS:我以前看过tp的分组,还没有完全掌握zf的分组。今天先写这么多吧!

Zend_Config使用笔记

1.zend_Config被设计在应用程序中简化访问和使用配置数据。它为在应用程序代码中访问这样的配置数据提供了一个基于用户接口的嵌入式对象属性。配置数据可能来自于各种支持等级结构数据存储的媒体

// 给出一个配置数据的数组
$configArray = array(
‘webhost’ => ‘localhost’,
‘database’ => array(
‘adapter’ => ‘pdo_mysql’,
‘params’ => array(
‘host’ => ‘localhost,
‘username’ => ‘dbuser’,
‘password’ => ‘secret’,
‘dbname’ => ‘mydatabase’
)
)
);

// 基于配置数据创建面向对象
$config = new Zend_Config($configArray);

// 输出配置数据 (结果为’localhost’中)
echo $config->webhost;

// 使用配置数据来连接数据库
$db = Zend_Db::factory($config->database->adapter,
$config->database->params->toArray());

// 另外的用法:简单地传递 Zend_Config 对象。
// Zend_Db factory 知道如何翻译它。
$db = Zend_Db::factory($config->database);

PS:还可这样使用
// config.php
return array(
‘webhost’ => ‘localhost’,
‘database’ => array(
‘adapter’ => ‘pdo_mysql’,
‘params’ => array(
‘host’ => ‘localhost’,
‘username’ => ‘dbuser’,
‘password’ => ‘secret’,
‘dbname’ => ‘mydatabase’
)
)
);
然后$config = new Zend_Config(require ‘config.php’);

Continue reading