今日小结 4.1

  • 数据库 的创建,记录的添加,修改,删除     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)记得添加权限

posted @ 2016-04-02 08:33  虫葛尔Chongger  阅读(151)  评论(0编辑  收藏  举报