Android的存储
数据存储方法分为5种 :
- SharedPreferences
- 内部存储
- 外部存储
- SQLite
- 网络连接
用于存放键值对 放及少数的数据
数据的写入
1.获取SharedPreferences
2.借助Editor,向SharedPreferences中写入数据
3.写入数据 只能写入基本数据 不能写入复合型的数据(boolean ,float ,int ,long ,String )
4.提交数据
String user ="root";
String pwd ="123465";
//1.获取SharedPreferences 参数1:名字 参数2MODE_PRIVATE 模式
SharedPreferences sp =getSharedPreferences("loginfo",MODE_PRIVATE);
//借助Editor 向SharedPreferences中写输入数据
SharedPreferences.Editor editor=sp.edit();
//写入数据 只能写入原始基本数据类型 不能写入复合型数的数据
editor.putString("user",user);
editor.putString("pwd",pwd);
//4.提交数据
editor.commit();
数据读取
1.获取SharedPreferences
2.获取数据
根据key获取到值
//数据的读取
//1.获取SharedPreferences
SharedPreferences sp1 =getSharedPreferences("loginfo",MODE_PRIVATE);
//2.获取数据
String sp_user =sp1.getString("user","");
String sp_pwd =sp1.getString("pwd","");
Toast.makeText(this, "账号"+sp_user+",密码"+sp_pwd, Toast.LENGTH_SHORT).show();
SQLite数据库
简介
sQLite简介
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎。它是一个零配置的数据库,这意味SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的sql数据库引擎。它是一个零配置的数据库,这意味
着与其他数据库不一样,您不需要在系统中配置。就像其他数据库, sQLite 引擎不是一个独立的进程, 可以按应用程序需求进行静态或着与其他数据库不一样,您不需要在系统中配置.就像其他数据库,sQLite引擎不是一个独立的进程,可以按应用程序需求进行静态或
动态连接。SQLite 直接访问其存储文件。动态连接.SQLite直接访问其存储文件.
为什么要使用SQLite
●不需要一个单独的服务器进程或操作的系统(无服务器的)。(不需要一个单独的服务器进程或操作的系统(无服务器的)。
●SQLite 不需要配置,这意味着不需要安装或管理。SQLite不需要配置,这意味着不需要安装或管理.
●SQLite 是非常小的,是轻量级的。
●SQLite 是自给自足的,这意味着不需要任何外部的依赖。SQLite是自给自足的,这意味着不需要任何外部的依赖.
●SQLite 务完全兼容ACID的,允许从多个进程或线程安全访问。SQLite务完全兼容acid的,允许从多个进程或线程安全访问.
●sQLite 支持标准的大多数查询语言的功能。、
轻量兼容多端无需配置无外部依赖拥有简单易懂的API安全综合来看,即轻量兼容多端无需配置无外部依赖拥有简单易懂的api安全
创建数据库
在构造方法中创建数据库
1.需要先创建一个java的文件然后继承 SQLiteOpenHelper
public class DBLIte extends SQLiteOpenHelper { }
借用Class,DBHelper 继承SQLiteOpenHelper
实现两个抽象方法 onCreate() onUpgrade() 创建一个带参的构造方法
在构造方法中 创建数据库
在onCreate() 方法中,创建表和插入数据
构造方法中的四个参数是什么意思
参数含义参数1 (context)上下文 活动的参数2 (name)数据库的名称参数3 (factory)工厂模式参数4 (version)版本
public DBLIte(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
public DBLIte(@Nullable Context context) {
super(context,"userinfo.db" , null, 1);
}
对表的增删改查(案例)
public class DBLIte extends SQLiteOpenHelper {
public DBLIte(@Nullable Context context) {
super(context,"userinfo.db" , null, 1);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//创建表
//键一个 有ID项 user pwd
sqLiteDatabase.execSQL("create table userinfo(id integer primary key,user text pwd text)");
//向表内插入数据、
//1.写SQL语句(推荐)
sqLiteDatabase.execSQL("insert into userinfo values(1,'root','123456')");
//2.SQLite特有的方法(不推荐)
ContentValues cv =new ContentValues();
cv.put("id",2);
cv.put("user","admin");
cv.put("pwd","00000");
sqLiteDatabase.insert("userinfo",null,cv);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
执行 增、删、改的流程
- 获取数据库对象
- 执行动作
- 释放资源
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
//链接数据库
DBLIte dblIte=new DBLIte(MainActivity4.this);
//获取数据库对象
SQLiteDatabase db = dblIte.getWritableDatabase();
//执行动作 //删除语句
String spl ="delete from userinfo where ?";
db.execSQL(spl,new String[]{"1"});
//获取结果
Toast.makeText(MainActivity4.this, "执行成功", Toast.LENGTH_SHORT).show();
执行查询语句的流程
- 获取数据库对象
- 执行查询 将结果集放入游标内
- 取出结果
- 释放资源
//查询操作
//链接数据库
DBLIte dblIte=new DBLIte(MainActivity4.this);
//获取数据库对象
SQLiteDatabase db = dblIte.getWritableDatabase();
//执行查询动作
String spl ="select * from userinfo where id=?";
Cursor currency =db.rawQuery(spl,null);
//取出结果
List<usel> list =new ArrayList();
while (currency.moveToNext()){
Usel usel = new Usel();
usel.setId(currency.getInt(0));
usel.setUser(currency.getString(1));
usel.setPwd(currency.getString(2));
list.add(usel);
}
//释放资源
currency.close();
db.close();
//查看数据库的值
for (Usel usel:list) {
Log.i("从数据库取值","id:"+usel.getId()+",账号:"+usel.getUser()+",密码:"+usel.getPwd());
}
</usel>
BroadCast Receiver广播
BroadCast简介
BroadCast是四大组件之一 必须字清单文件(androidManifest.xml)里进行注册
是组件之间传播数据的一种机制
属性
1.广播接收者的生命周期是非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁
2.广播接收者中不要做一些耗时的工作,否则会弹出Application No Response错误对话框
3.最好也不要在广播接收者中创建子线程做耗时的工作,因为广播接收者被销毁后进程就成为了空进程,很容易被系统杀掉
4.耗时的较长的工作最好放在服务中完成广播接收器
例如APP中哪里用到了广播
短信 电话 电量 网络
广播的接收器
标准广播
标准广播是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播的信息,因此他们之间没有任何的先后顺序可言。
创建
=
1.创建广播接受者
2.在AndroidManifest.xml中对广播接收者进行注册
3.发送广播
; 静态注册
谷歌在8.0后为了提高效率,删除了静态注册,防止关闭App后广播还在, 造成内存泄漏, 现在静态注册的广播需要指定包名!!! 直接在androidManifest.xml注册*
1.创建广播接受者
2.在AndroidManifest.xml中对广播接收者进行注册
3.发送广播
<receiver android:name=".MyReceiver" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="my"></action>
</intent-filter>
</receiver>
静态注册
案例
tb_button =findViewById(R.id.tb_button);
tb_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent1 =new Intent();
intent1.setAction("my");
intent1.putExtra("info","啦啦啦");
startActivity(intent1);
}
});
@Override
public void onReceive(Context context, Intent intent) {
Log.i("MyStativReceiver","静态接受到的内容是:"+intent.getStringExtra("info"));
}
动态注册
使用java代码注册
//发送给动态广播接受者
tb_button1 =findViewById(R.id.tb_button1);
tb_button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view){
Intent intent1 =new Intent();
intent1.setAction("my");
intent1.putExtra("info","动态啦啦啦");
startActivity(intent1);
}
});
//注册动态广播接受者
myReceivers=new MyReceiver();
IntentFilter intentFilter =new IntentFilter();
intentFilter.addAction("my");
registerReceiver(myReceivers,intentFilter);
}
class myReceivers extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Log.i("动态广播接受者",intent.getStringExtra("info"));
}
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceivers);
}
s extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Log.i("动态广播接受者",intent.getStringExtra("info"));
}
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceivers);
}
### 有序广播
Original: https://blog.csdn.net/weixin_58171704/article/details/125960991
Author: sirwz
Title: Android的存储 BroadCast Receiver广播
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/817512/
转载文章受原作者版权保护。转载请注明原作者出处!