- 数据库 的创建,记录的添加,修改,删除 OK
- 生命周期,活动的创建、销毁、跳转
1.面向对象的程序设计的代码执行顺序好比是 数据结构中图的广度优先遍历
比如:
public void onClick(View v) { Log.d("mylog","onClick"); Intent it = new Intent (MainActivity.this,SubActivity.class); it.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); Log.d("mylog","CLEAR_TOP"); startActivity(it); Log.d("mylog","startActivity(it)"); }
onClick事件(对象)的代码中会从上到下执行每一条代码,这一层(onClick事件)的代码遍历完成后再往下,即 再去执行startActivity那一层的代码
so, log.d 的输出信息依次是:
04-01 09:29:43.281 10291-10291/? D/mylog: onClick //这一层
04-01 09:29:43.283 10291-10291/? D/mylog: CLEAR_TOP
04-01 09:29:43.325 10291-10291/? D/mylog: startActivity(it)
04-01 09:29:43.351 10291-10291/? D/mylog: onCreate SubActivity //下一层
2.销毁前一个活动
3.ContentValues 方式 把记录写入数据表
// ContentValues 其实就是一个哈希表HashMap, key值是字段名称,
// Value值是字段的值。然后 通过 ContentValues 的 put 方法就可以
// 把数据放到ContentValues中,然后插入到表中去
4.对象数组
public void update(int id, String name, String birthday){ String whereClause = "id=?"; //更新哪一个,用占位符的形式表示 String whereArgs[] = new String[]{String.valueOf(id)}; //填入占位符 ContentValues cv = new ContentValues(); cv.put("name",name); cv.put("birthday",birthday); this.db.update(TABLENAME, cv, whereClause, whereArgs); this.db.close(); }
5.构造函数是在实例化对象的时候执行,但是 onCreate() 方法不一定是在实例化对象时候执行
在Activity的子类当中,onCreate()是最先执行的,在这个方法中完成活动的一些初始化操作(即只做一次的操作)
比如加载布局,绑定控件(实例化对象),开启监听事件,初始化设置等操作:
(1)加载布局
(2)绑定控件(实例化对象)
(3)开启监听事件(有点像单片机中的 开启中断)
(4)初始化设置
@Override protected void onCreate(Bundle savedInstanceState) { //加载布局 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //绑定控件 mTabAdd = (ImageButton) findViewById(R.id.ib_bottombar_add); mTabEdit= (ImageButton) findViewById(R.id.ib_bottombar_edit); //开启监听事件 mTabEdit.setOnClickListener(this); mTabAdd.setOnClickListener(this); //设置默认的片段视图Fragment setDefaultFragment(); }
然后去写初始化设置的具体方法
private void setDefaultFragment() { FragmentManager fragmentManager = getFragmentManager(); //取得和实例化Fragment管理器 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); //开启Fragment事务 mAdd = new ContentFragment(); //实例化Fragment类(即Fragment的控制器) fragmentTransaction.replace(R.id.framelayout_displayFragment, mAdd); //更新布局,在容器FrameLayout中更新fragment fragmentTransaction.commit(); //提交事务 }
最后写监听事件里的具体方法,(相当于写中断函数,让机子反复监听、执行的操作)
/*覆写这个类中(已经实现了 View.OnClickListener 接口)单击事件的方法*/ @Override public void onClick(View v) { FragmentManager fragmentManager = getFragmentManager(); //取得和实例化Fragment管理器 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); //开启Fragment事务 switch (v.getId()) { case R.id.ib_bottombar_add: if (mAdd == null) { //如果ContentFragment还没有创建(对象)则创建(即实例化ContentFragment类) mAdd = new ContentFragment(); } fragmentTransaction.replace(R.id.framelayout_displayFragment, mAdd); //更新布局 break; case R.id.ib_bottombar_edit: if(mEdit == null){ mEdit = new ContentEditFragment(); } fragmentTransaction.replace(R.id.framelayout_displayFragment,mEdit); break; default: break; } fragmentTransaction.commit(); //提交事务(提交更改) }
在SQLiteOpenHelper的子类中,onCreate()并不是在实例化对象:
mdbhelper = new DBHelper(SQLiteActivity.this); //实例化SQLiteOpenHelper
后执行,而是要在
mdbhelper.getWritableDatabase()
方法后,也就是创建数据库后执行。
因此,可以在这个onCreate()方法中,写入sql 语句去创建数据表
6.SQLite数据库使用注意事项:
(1)String 书写SQL语句 注意空格
创建数据表:
String sql = "CREATE TABLE " + TBNAME_MYCLOTHES //SQL语句,创建数据表 + "(id INTEGER PRIMARY KEY," + "name VARCHAR(50) NOT NULL," + "category VARCHAR(50) NOT NULL," + "warmindex INTEGER NOT NULL," + "occasion VARCHAR(50) NOT NULL," + "time VARCHAR(50) NOT NULL)";
插入一条记录
public void insert(String name, String category, Integer warmindex, String occasion, String time){ Log.d("mylog","进入了 插入记录到数据表"); String sql = "INSERT INTO " + this.TBNAME + "(name,category,warmindex,occasion,time) VALUES(?,?,?,?,?)"; Object[] args = new Object[]{name,category,warmindex,occasion,time}; //对象数组 this.db.execSQL(sql,args); this.db.close(); //关闭数据表 Log.d("mylog","完成了 插入记录到数据表"); }
(2)SQLite数据库写入SD卡中
1)数据库所在目录不会自动创建,需要File类先判断再创建目录
2)记得添加权限