zoukankan      html  css  js  c++  java
  • 今日小结 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)记得添加权限

  • 相关阅读:
    深入c#的String类
    C#语法快速热身
    【BZOJ】1676: [Usaco2005 Feb]Feed Accounting 饲料计算
    【BZOJ】2056: gift? 高精度?
    【BZOJ】3036: 绿豆蛙的归宿
    【BZOJ】2321: [BeiJing2011集训]星器
    【VIJOS】P1401复制CS
    【BZOJ】2453: 维护队列&&【BZOJ】2120: 数颜色 二分+分块 双倍经验
    【BZOJ】3343: 教主的魔法
    【BZOJ】1452: [JSOI2009]Count 树状数组
  • 原文地址:https://www.cnblogs.com/Chongger/p/5343999.html
Copyright © 2011-2022 走看看