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,然后重写其中的抽象方法。
创建SQLiteOpenHelper的实现类
打开数据库时,如果数据库不存在,系统会为我们创建数据库,并返回引用;如果数据库存在,系统会直接返回数据库引用
- 创建的数据库文件位于/data/data/包名/databases/目录中。
6.创建数据库的表结构
7.升级数据库
- 当手机中的数据库版本低于SQLiteOpenHelper中配置的版本时,会自动调用onUpgrade方法进行数据库升级
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) 内存溢出
- 手机中的内存非常有限,每个应用在使用内存时有一个最大值,当占用的内存超过最大值时就会产生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显示
- 使用MVC的设计模式,M(model)-数据模型、V(view)-界面展现、C(controller)-控制器
- 为什么ListView可以展现大量数据
- 原理:只展现界面可见的部分,当滑动时再展现新的部分
- 代码
13.ListView的优化原理
- ListView的优化原理是:创建少量的TextView,当一个TextView滑动到不可见时,下次创建新的TextView的时候重新使用该TextView,只需要重新设置text的值就可以了
14.优化ListView的代码实现
15.创建View
- 使用代码创建view
- 使用layout创建view
16.更新ListView
- 使用场景:当ListView使用的数据发生变化,我们想让界面也随之更新
- 使用的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
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(简单数据适配器)
- ArrayAdapter
- SimpleAdapter
22.Android中的动画系统
- Drawable Animation
- 在XML文件中定义动画文件
- 在代码中开启动画
- 在XML文件中定义动画文件
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.样式和主题
- 定义一个样式或主题
- 在res/values/styles.xml文件中定义一个样式或主题
- 在res/values/styles.xml文件中定义一个样式或主题
- 使用样式或主题
25.总结
- SQliteDatabase数据库的使用
- 数据库的创建,初始化表结构
- 数据库的更新
- 数据库的增、删、改、查
- 数据库的事务
- ListView的使用
- ListView的工作原理
- ListView的使用方式
- ListView的优化
- ListView的更新
- ListView的各种适配器,主要熟悉BaseAdapter
- 如何将布局转化为View
- ListView优化的原理:复用缓存的convertView
- 常见对话框
- 交互对话框
- 进度条对话框
- 帧动画
- 国际化
- 样式和主题
扩展: 命令行netstat -ano | findstr “5037” 查看端口号