Android数据存储的5种方式
来源:互联网 发布:天津总医院挂号软件 编辑:程序博客网 时间:2024/05/23 01:04
Android数据存储在开发中是经常遇到的,在Android中数据存储的方式有5种:
1.使用SharedPreference 存储数据
2.文件存储数据
3.SQLite数据库存储数据
4.使用ContentProvider存储数据。
5.网络存储数据
一。存储数据
本质是基于xml文件存储key-value键值对数据。通常用来存储一些简单的配置信息。存储位置在/data/data/相应包名/shared_prefs/目录下。
实现SharedPreference存储与取出数据的步骤是:
1.利用context获取SharedPreference对象,里面有两个参数:第一个参数是share文件的名字,第二个参数是文件的读写权限
SharedPreference sp = context.getSharedPreference();
2.获取SharedPreference的Editor的对象
Editor editor = sp.edit();
3.利用editor存储key-value键值对
editor.put("key",value);
editor.put("key",value);
editor.put("key",value);
4.提交存储信息
editor.commit();
获取SharedPreference里面存储的数据
1.获取SharedPreference的对象,参数同上
SharedPreference sp = context.getSharedPreference();
2.获取里面存储的数据
String value = sp.getString();//这里不止是String类型,还有很多基本类型的。
SharedPreference是一种轻量级的数据存储方式,很方便,但是也有其自身的缺陷:比如存储的数据比较简单,只有boolean、int、String、float、long类型的,而且不能进行条件查询。
二。文件存储数据
关于文件存储,Activity提供了openFileOutput()方法用于把数据存储到文件中,文件可用来存储大量的数据,比如图片、文本、音频。默认位置是:/data/data/包名/files/...
示例代码:
public void save(){
FileOutputStream fos = this.openFileOutput("a.txt",Context.MODE_WORLD_READABLE);
参数解析: 第一个参数用于指定要创建的文件的名称,不能包含路径分隔符“/”,如果文件不存在,Android会自动 创建。创建的文件会保存在/data/data/包名/files下。
第二个参数用于指定文件的操作模式。
有四种操作模式:
Context.MODE_PRIVATE = 0//私有模式
}
activity还提供了 getFileDir()和getCacheDir()两种方法: getFileDir()获取的是data/data/应用包名/files目录 getCacheDir()获取的是data/data/应用包名/cache目录
把文件存入到SD卡中:
使用到的权限是:
android:name="android.permission.WRITE_EXTERNAL_STORAGE //写入数据的权限
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS//创建与删除文件的权限
要往SD卡中存放文件,需要首先判断SD是否已经挂载
Environment.getExternalStorageState()//获取当前SD卡的状态
MEDIA_MOUNTED:表明sd卡是存在并具有读/写权限
if(Environment.getExternalStorageState.equals(Environment.MEDIA_MOUNT)){
File fileDir = Environment.getExternalStorageDirectory();//得到SD卡文件存储路径
File file = new File(fileDir,"a.txt");
FileOutputStream fos = new FileOutputStream(file);
fos.write(content.toString().getBytes());
fos.close();
}
数据存储的第三种方式:SQLite数据库存储
步骤:
1.自定义一个类继承于SQLiteOpenHelper,重写构造方法,在构造方法中创建出数据库,重写OnCreat()方法和Onupgrage()方法 ,Oncreat()方法初始化表格信息,Onupgrage()是更新数据库版本的方法
2.自定义数据库操作类,增删改查的方法。
数据库增删改查的方式有两种:
1.执行sql语句
2.使用ContentValue存储数据信息 执行 insert delete update query等方法进行数据库操作。
数据存储的第四种方式:ContentProvider
ContentProvider主要是应用于应用程序间的数据共享的。主要是用到了进程间Binder通信机制,把共享数据存储到共享内存里面,返回给调用者一个打开共享数据的文件标识符。
其实在笔者自己看来:所谓的contentProvider很简单,跟我们经常使用的http请求一样。数据存储的SQLite或者文件就相当于后台使用的Mysql,自定义的Content Provider相当于severlet接口,它的主要作用就是接收数据请求以及连接数据库,调取数据库的操作获取返回的数据,并把数据返回给请求者,
而我们使用ContentResolver去调用一些方法对数据进行增删改查的操作。这就是一个数据请求的过程。可能我的理解稍微简单,如果有人觉得不对,希望能指点下。
具体的实现步骤:
1.建立数据的存储系统
数据的存储系统可以由开发者自行决定,是用file文件还是用SQLite数据库。
2.提供数据共享的接口。
自定义content Provider的子类,实现6个方法:query(); insert(); update();
3.使用ContentResovler进行数据操作
例子:
public class DBOpenHelper extends SQLiteOpenHelper {
public static final String myProvider_table_name="myProvider_table_name";
String sql="create table myProvider_table_name(_id integer,name text)";
public DBOpenHelper(Context context) {
super(context, "myPrivoder.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
//初始化表结构
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
自定义contentProvider
public class MyProvider extends ContentProvider{
DBOpenHelper helper;
@Override
public boolean onCreate() {
// TODO Auto-generated method stub
System.out.println("执行创建的方法");
helper = new DBOpenHelper(getContext());
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
System.out.println("执行查询的方法");
SQLiteDatabase db = helper.getWritableDatabase();
Cursor cursor = db.query(DBOpenHelper.myProvider_table_name, projection, selection, selectionArgs, null, null, sortOrder);
return cursor;
}
@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
System.out.println("执行插入的方法");
SQLiteDatabase db = helper.getWritableDatabase();
db.insert(DBOpenHelper.myProvider_table_name, null, values);
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
System.out.println("执行删除的方法");
SQLiteDatabase db = helper.getWritableDatabase();
int id = db.delete(DBOpenHelper.myProvider_table_name, selection, selectionArgs);
if (id!=0) {
return id;
}
System.out.println(id+"");
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO Auto-generated method stub
System.out.println("执行更新的方法");
SQLiteDatabase db = helper.getWritableDatabase();
int count = db.update(DBOpenHelper.myProvider_table_name, values, selection, selectionArgs);
if (count != 0) {
return count;
}
return 0;
}
}
public class MainActivity extends Activity {
Uri uri ;
String AUTHORITY = "content://com.example.testdata.MyProvider/myProvider_table_name";
ContentResolver resolver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
uri = Uri.parse(AUTHORITY);
resolver = MainActivity.this.getContentResolver();
ContentValues values = new ContentValues();
values.put("name", "小红");
// values.put("name", "小黄");
resolver.insert(uri, values);
Cursor cursor = resolver.query(uri, null, null, null, null);
System.out.println("数据集合大小为:"+cursor.getCount());
while (cursor.moveToNext()) {
int index = cursor.getColumnIndex("name");
System.out.println("想要获取的列index为:"+index);
System.out.println(cursor.getString(index));
}
}
}
如果想要在数据发生变化的时候就需要注册内容观察者,
步骤如下:使用contentResolver
ContentResolver resolver = getContentResolver();
resolver.registerContentObserver(uri, true, new MyObserver(new Handler()));
class MyObserver extends ContentObserver{
public MyObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
System.out.println("数据发生了变化");
}
}
第五种方式:网络存储
- android的数据存储方式------5种
- android的数据存储方式------5种
- Android存储数据的5种方式
- android的数据存储方式------5种
- android的数据存储方式------5种
- android的数据存储方式------5种
- android的数据存储方式------5种
- android的数据存储方式------5种
- Android数据存储的5种方式
- Android的5中数据存储方式
- android数据存储的几种方式
- android 数据存储的几种方式
- android存储数据的方式3种
- 【Android】数据的四种存储方式
- Android数据存储的4种方式
- Android数据的四种存储方式
- Android数据的四种存储方式
- Android数据的四种存储方式
- Linux系统挂载错误的问题
- jquery移除结点
- Verilog中一些综合(synthesis)指令
- 实现strcmp( )和strncmp( )函数
- uImage、zImage、bzImage、vmlinux区别
- Android数据存储的5种方式
- tjut 4705
- fallthrough
- Java设计模式--访问者模式
- 百度地图201607
- IV
- ActiveMQ讯息传送机制以及ACK机制
- POJ 1328-Radar Installation
- POJ_2392_SpaceElevator(多重背包)