数据存储

数据存储
1.SharePreference 不能进行修改值(通过Editor获取)可以进行获取值。
2.Sqlite
2.1 每个程序都有自己的数据库 默认情况下是各自互不干扰的(一个 程序要访问其他程序的数据库 可以通过contentprovider实现)。
//创建一个数据库 如果这个数据库存在则打开这个数据库否则创建这个数据库
SQLiteDatabase sqLiteDatabase = openOrCreateDatabase(“mode.db”, MODE_PRIVATE, null);
String sql=”create table if not exists user(_id integer primary key autoincrement,name text not null,age integer not null)”;
sqLiteDatabase.execSQL(sql);//执行sql语句
sqLiteDatabase.execSQL(“insert into user(name,age) values(‘莉莉丝’,’22’)”);//执行sql语句
Cursor cursor = sqLiteDatabase.rawQuery(“select * from user”, null);
String name_=”“;
int age_ = 0;
if(cursor!=null){
while (cursor.moveToNext()){//判断是否有下一条数据
name_= cursor.getString(cursor.getColumnIndex(“name”));
age_= cursor.getInt(cursor.getColumnIndex(“age”));
}
cursor.close();//循环结束释放游标
}
3.使用ContentValues
SQLiteDatabase db = openOrCreateDatabase(“user1.db”, MODE_PRIVATE, null);
db.execSQL(“create table if not exists user(_id integer primary key autoincrement,name text not null,age integer not null”);
ContentValues values = new ContentValues();
values.put(“name”, “张三”);
values.put(“sex”, “男”);
values.put(“age”, “22”);
db.insert(“user”, null, values);
values.clear();
values.put(“sex”, “女”);
db.insert(“user”, null, values);//插入数据
db.update(“user”, values, “_id>?”, new String[]{“-1”});//将id所有大于-1的性别改为女 就是将所有性别都改为女 更新数据
db.delete(“user”, “name like ?”, new String[]{“%三”});//删除所有名字中带三的人 删除数据
Cursor query = db.query(“user”, null, “_id>?”, new String[]{“-1”}, null, null, “name”);//查询数据
if (query != null) {
while (query.moveToNext()){
String name=query.getColumnName(query.getColumnIndex(“name”));
}
query.close();
}
db.close();
4.SqliteOpenHelper 用于管理数据库的创建和版本更新
public class MySqliteOpenHelper extends SQLiteOpenHelper {
public MySqliteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override 创建数据库时调用 建库建表
public void onCreate(SQLiteDatabase db) {
}
@Override 版本更新时调用
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
5.文件存储 File
5.1 File filesDir = getFilesDir();//当前应用程序默认的数据存储目录
Log.e(“file”,filesDir.getAbsolutePath()); /data/data/wallpaper.fashionetwork.t/files
5.2 Log.e(“cache”,getCacheDir().getAbsolutePath());//不是非常重要的文件在此目录中创建 缓存目录 如果系统内存不足的时候 系统会自动删除app中缓存目录中的数据
这里写图片描述
这里写图片描述
5.3 文件读写 主要通过activity提供的两个方法 向文件中写入内容openFileOutput(文件名,模式) openFileInput(文件名)从文件读取内容
try {
FileOutputStream fileOutputStream = openFileOutput(“a.txt”, MODE_PRIVATE);//写入文件 activity的方法 没有文件则创建
fileOutputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
FileInputStream fileInputStream = openFileInput(“a.txt”);
ByteArrayOutputStream bos=new ByteArrayOutputStream();
byte[]buffer=new byte[1024*4];
int len=0;
while ((len=fileInputStream.read(buffer))!=-1){
bos.write(buffer,0,len);
}
bos.toString();
fileInputStream.close();
bos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
6.内容提供者 以上几种数据存储都是在一个应用程序达到数据的共享 不同跨程序访问数据 从而引出内容提供者 相当于服务器(也是一个application) 其他程序可以访问该服务器的数据 通过Uri 来进行增删改查
7.BroadcastReceiver:广播接受者
广播接收者生命周期非常短 10秒左右 不要在里面进行耗时操作
8.Srevice 服务
后台运行 无界面 优先级高于activity 运行在主线程
本地服务(LocalService)应用程序内部 startService bindService
8.1生命周期
这里写图片描述
8.2.startService
onCreate()只会执行一次 也就是服务对象只能有一个 但是onstartCommand()方法会执行多次 也就是每次点击启动服务都会执行onStartCommand().
8.3 stopService
调用stopService方法会调用destroy()方法。服务对象销毁 再次调用停止服务不会有任何操作。
8.4 bindService 主要使用的是onBind()这个方法 返回的是IBiner对象 但是这个IBinder对象不能直接创建 而是通过自定义一个类来继承Binder类 返回服务类对象的引用 从而可以供外部Activity调用服务中的方法。
public class MyBindService extends Service {
public class MyBinder extends Binder{
public MyBindService getService(){
return MyBindService.this;
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new MyBinder();
}
public void play(){
Log.e(“binder”,”play”);
}public void stops(){
Log.e(“binder”,”stop”);
}
}
8.4.1使用绑定服务一定要使用ServiceConnection接口
connection=new ServiceConnection() {
@Override//当启动源和Service连接成功的时候
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {//这个iBinder对象就是服务中返回的IBinder对象也就是MyBinder对象 调用getService()可以获取到服务的实例
service= ((MyBindService.MyBinder)iBinder).getService();
}
@Override//当启动源和service的连接意外丢失的时候会调用这个方法
public void onServiceDisconnected(ComponentName componentName) {
}
};
bindService(intent,connection, Service.BIND_AUTO_CREATE);
9.系统服务
MountService:监听是否有SD卡安装或者移除
ClipboardService提供剪切板功能
PackageManagerService提供软件包的安装移除及查看
getSystemService();activity的一个方法
这里写图片描述
例布局管理器服务: LayoutInflater systemService = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
View inflate = systemService.inflate(R.layout.activity_main, null);
setContentView(inflate);
例网络连接服务:
ConnectivityManager conn= (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = conn.getActiveNetworkInfo();
if(activeNetworkInfo!=null){
boolean available = activeNetworkInfo.isAvailable();
}
例WIFI打开或者关闭
WifiManager manager= (WifiManager) getSystemService(WIFI_SERVICE);
if(manager.isWifiEnabled()){
manager.setWifiEnabled(false);
}else {
manager.setWifiEnabled(true);
}
例获取系统音量
AudioManager manager= (AudioManager) getSystemService(AUDIO_SERVICE);
int streamMaxVolume = manager.getStreamMaxVolume(AudioManager.STREAM_ALARM);//获取系统最大音量值
int streamVolume = manager.getStreamVolume(AudioManager.STREAM_ALARM);//获取系统当前音量值
例应用包名
ActivityManager manager= (ActivityManager) getSystemService(ACTIVITY_SERVICE);
String packageName = manager.getRunningTasks(1).get(0).topActivity.getPackageName();//当前运行activity的包名
10.Sqlite 分析2
10.1Sqlite中字段数据类型 建表 增删改查语句
这里写图片描述
这里写图片描述
10.2要创建数据库可以使用android 提供的SqliteOpenHelper数据库帮助类 里面有onCreate(),OnUpgrade()两个抽象方法 一个是在创建数据库时调用一个是数据库版本更新时调用 可以在onCreate()方法中进行建表操作
这里写图片描述
这里写图片描述
10.3定义一个数据库管理类 创建数据库单例类
这里写图片描述
10.4通过数据库单例类对象.getReadableDatabase()或者getWritableDatabase()都是用来创建或者打开一个数据库 区别是 如果SD卡满了调用.getReadableDatabase()则只能读数据不能写数据了。而
getWritableDatabase()依然可读可写
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值