Android - SQLite数据库创建/增删改查/升级,OOM,ListView(优化/更新),常见对话框,ArrayAdapter,SimpleAdapter,动画,国际化,样式和主题

转载请注明出处:https://blog.csdn.net/mythmayor/article/details/72869044

1.数据存储

  • 文件存储
  • 参数 SharedPreferences
  • 数据库

2.数据库需求

有很多结构类似的数据,增删改查.

3.SQLite 简介

开源项目,c,嵌入式轻量级数据库.
SQLite 是一款内置到移动设备上的轻量型的数据库,多用于嵌入式系统中。

4.数据库的创建

//1.文件的帮助类,得到一个文件的引用.如果文件不存在.第一行代码执行文件不会被创建
File file = new File("文件的名称.db");
//2.通过输出流向文件写数据.
FileOutputStream fos  = new FileOutputStream(file);
fos.write("hello".getBytes());
fos.close();

如何创建数据库
1. 定义一个数据库创建的帮助类 MyDataBaseOpenHelper extends SQLiteOpenHelper
2. 指定数据库文件的名称,数据库的版本号.默认的游标工厂
3. 通过helper得到一个可写或者是可读的数据库,数据库才会被创建
helper.getWritableDatabase();

5.创建数据库

  • SQLiteOpenHelper 是 Android 提供的一个抽象工具类,负责管理数据库的创建、打开、升级工作。如果我们想创建数据库,就需要自定义一个类继承 SQLiteOpenHelper,然后重写其中的抽象方法。

    1. 创建SQLiteOpenHelper的实现类
      这里写图片描述

    2. 打开数据库时,如果数据库不存在,系统会为我们创建数据库,并返回引用;如果数据库存在,系统会直接返回数据库引用
      这里写图片描述

  • 创建的数据库文件位于/data/data/包名/databases/目录中。

6.创建数据库的表结构

搜狗截图20160518172614.jpg

7.升级数据库

  • 当手机中的数据库版本低于SQLiteOpenHelper中配置的版本时,会自动调用onUpgrade方法进行数据库升级
    搜狗截图20160518172712.jpg

8.增、删、改、查的sql语句


  • insert into student (name, phone) values (‘张三’, ‘110’)

  • delete from student where name=‘张三’

  • update student set phone=‘119’ where name=‘张三’

  • select * from student where name=‘张三’

9.使用命令行查看数据库

1.adb shell //进入shell模式
2.cd data/data/com.mythmayor.test/databases //进入文件夹
3.cd data/data/com.mythmayor.test/databases # sqlite3 info.db //sqlite3指令打开数据库
4.select * from people //查询语句得到查询结果

10.doc窗口 cmd窗口修改编码

chcp 65001 — (utf-8)
chcp 936 — (ANSI/OEM - 简体中文 GBK)

11.OutOfMemory(OOM) 内存溢出

搜狗截图20160518172916.jpg

  • 手机中的内存非常有限,每个应用在使用内存时有一个最大值,当占用的内存超过最大值时就会产生OOM异常
  • 如,不停地往布局里添加控件,不停地往集合里添加数据,加载一个超大的图片到内存等

12.ListView的使用

        > 是系统给我们提供的一个可以显示很多个item的控件.
      > 这个控件合理的控制了界面的显示,即使有1000000万个item要显示他也能扛得住

使用步骤
1. 在布局xml文件声明listview控件
2. 在java代码找到listview控件设置数据适配器,继承BaseAdapter
3. getCount()确定listview里面有多少个条目
4. getView(int position) 返回某个位置要显示的view对象
5. View.inflate() 打气筒 可以把xml文件转成view显示

  1. 使用MVC的设计模式,M(model)-数据模型、V(view)-界面展现、C(controller)-控制器
  2. 为什么ListView可以展现大量数据
    • 原理:只展现界面可见的部分,当滑动时再展现新的部分
  3. 代码

001.jpg

002.jpg

003.jpg

13.ListView的优化原理

  • ListView的优化原理是:创建少量的TextView,当一个TextView滑动到不可见时,下次创建新的TextView的时候重新使用该TextView,只需要重新设置text的值就可以了

14.优化ListView的代码实现

搜狗截图20160518173544.jpg

15.创建View

  1. 使用代码创建view
    搜狗截图20160518173725.jpg
  2. 使用layout创建view
    搜狗截图20160518173817.jpg

16.更新ListView

  1. 使用场景:当ListView使用的数据发生变化,我们想让界面也随之更新
  2. 使用的API:
    adapter.notifyDataSetChanged();

17.常见对话框

1. 交互对话框
    //创建对话框,使用对话框构建器AlertDialog.Builder
    AlertDialog.Builder builder = new Builder(this);
    //设置标题
    builder.setTitle("标题");
    //设置内容
    builder.setMessage("内容"); 
    //设置单选按钮
    builder.setSingleChoiceItems(items, -1, new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
        }
    });
    //设置多选按钮
    builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which,
                boolean isChecked) {
            // TODO Auto-generated method stub
        }
    });
    //设置确定按钮
    builder.setPositiveButton("确定", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
        }
    });
    //设置取消按钮
    builder.setNegativeButton("取消", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
        }
    });
    //显示对话框
    builder.show();
2. 进度对话框
    ProgressDialog pd = new ProgressDialog(this);
    /**
     * 有两种类型
     * ProgressDialog.STYLE_SPINNER    圆形旋转
     * ProgressDialog.STYLE_HORIZONTAL 水平进度
     */
    pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    pd.setMax(100); //使用STYLE_HORIZONTAL时,可设置进度最大值
    pd.setProgress(10); //使用STYLE_HORIZONTAL时,可设置当前进度
    pd.setTitle("提醒"); //设置标题
    pd.setMessage("正在加载数据...请稍后"); //设置内容
    pd.show(); //显示对话框
    pd.dismiss(); //隐藏对话框

18.设置可快速滑动的ListView

搜狗截图20160518173926.jpg

19.数据库的增删改查

1. 使用纯 SQL 语句实现
    //增
    db.execSQL("insert into student (name,sex) values (?,?)", new Object[]{name,sex});
    //删
    db.execSQL("delete from student where name=?",new Object[]{name});
    //改
    db.execSQL("update student set sex =? where name=?",new Object[]{newsex,name});
    //查
    Cursor cursor = db.rawQuery("select sex from student where name=?", new String[]{name});
2. 使用特有 API 实现,系统帮我们组拼sql语句,开发中一般使用这种方式。优点:1.不容易拼错sql语句;2.有返回值,可以判断是否执行成功
    //增
    db.insert("student", null, values);
    //删
    db.delete("student", "name=?", new String[]{name});
    //改
    db.update("student", values, "name=?", new String[]{name});
    //查
    db.query("student", new String[]{"sex"}, "name=?", new String[]{name}, null, null, null);

20.数据库的事务

>事务:保证一组操作要么同时成功,要么同时失败.

SQLiteDatabase 提供的 beginTransaction()打开事务,endTransaction()结束事务。注意:结束 事务并不代表事务提交,如果想让数据写入的数据库需要在结束事务前执行 setTransactionSuccessful()方法。这是事务提交的唯一方式。

BankDBOpenHelper helper = new BankDBOpenHelper(this);
SQLiteDatabase db = helper.getWritableDatabase();
db.beginTransaction(); //1.开启事务
try {
    // 模拟转账的操作
    db.execSQL("update account set money=money-100 where name='zhangsan'");
    db.execSQL("update account set money=money+100 where name='lisi'");
    db.setTransactionSuccessful();//2.设置事务执行成功
} finally {
    db.endTransaction();//3.结束事务
}
db.close();

21.ArrayAdapter(数组适配器)和SimpleAdapter(简单数据适配器)

  1. ArrayAdapter
    搜狗截图20160518174101.jpg
  2. SimpleAdapter
    搜狗截图20160518174132.jpg

22.Android中的动画系统

搜狗截图20160518174345.jpg

  • Drawable Animation
    1. 在XML文件中定义动画文件
      搜狗截图20160518174429.jpg
    2. 在代码中开启动画
      搜狗截图20160518174505.jpg

23.国际化(internationalization)

  • 创建不同的values文件夹来国际化字符串
  • 创建不同的drawable文件夹来国际化图片
  • 一些地区的文件夹
    • 中文(中国):values-zh-rCN
    • 中文(台湾):values-zh-rTW
    • 中文(香港):values-zh-rHK
    • 英语(美国):values-en-rUS
    • 英语(英国):values-en-rGB
    • 日文:values-ja-rJP
    • 韩文:values-ko-rKR

24.样式和主题

  1. 定义一个样式或主题
    • 在res/values/styles.xml文件中定义一个样式或主题
      001.jpg
  2. 使用样式或主题
    002.jpg

25.总结

  1. SQliteDatabase数据库的使用
    • 数据库的创建,初始化表结构
    • 数据库的更新
    • 数据库的增、删、改、查
    • 数据库的事务
  2. ListView的使用
    • ListView的工作原理
    • ListView的使用方式
    • ListView的优化
    • ListView的更新
    • ListView的各种适配器,主要熟悉BaseAdapter
    • 如何将布局转化为View
      • ListView优化的原理:复用缓存的convertView
  3. 常见对话框
    • 交互对话框
    • 进度条对话框
  4. 帧动画
  5. 国际化
  6. 样式和主题

扩展: 命令行netstat -ano | findstr “5037” 查看端口号

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值