Android 数据存储

Android提供的数据存储有3种:SharePreference,File,SQLite

(1)SharePreference

这个就是创建一个XML文件保存起来而已,保存的内容全部都是键值对,可以说是一个Map了,数据保存在/data/data/<package name>/shared_prefs文件夹里面,注意是根目录下,没root权限的手机是看不到进不到去那个文件夹的。
创建SharePreference对象,第一个参数是创建的XML文件名,第二个是模式参数:MODE_PRIVATE(只允许该应用程序访问),MODE_WORLD_READABLE(允许其他应用程序可读),MODE_WORLD_WRITEABLE(允许其他应用程序可读写)
sharedPreferences=getSharedPreferences("test", MODE_WORLD_READABLE);
获得sharePreference对象可以获取key="name"的值,如果不存在该key就返回第二个参数
sharedPreferences.getString("name", "")
获取SharePreference.Editor类的对象用于写入key-value对:
editor=sharedPreferences.edit();
editor.putString("name", name.getText().toString());
editor.putString("age", age.getText().toString());
editor.commit();
最后必须记得要调用commit()保存。

其他应用程序也可以利用这个XML,利用createPackageContext函数来获取其他应用程序的context:
Context context=createPackageContext("com.example.sharepreferencetest", Context.CONTEXT_IGNORE_SECURITY);
sharedPreferences=context.getSharedPreferences("test", MODE_WORLD_READABLE);

(2)File

文件保存数据分两种,一种是默认存在/data/data/<package name>/files里面的,一种是可选位置,存在SD卡的

存在/data/data/<package name>/files里面的

openFileOutput(文件名,MODE);返回的就是那个路径下myfile.txt的文件输出流
openFileInput(文件名,MODE);返回的就是那个路径下myfile.txt的文件输入流
FileOutputStream fos=openFileOutput("myfile.txt", MODE_WORLD_READABLE);
fos.write(edit1.getText().toString().getBytes());
fos.close();
FileInputStream fis=openFileInput("myfile.txt");
byte buffer[]=new byte[fis.available()];
fis.read(buffer);
edit2.setText(new String(buffer));


存在SD卡的

确保SD卡中创建和删除文件的权限和往SD卡写数据的权限:
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
手机是否插有SD卡:
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
为true就意味着插有SD卡
获取SD卡的目录:
File sdcardDir=Environment.getExternalStorageDirectory();
在SD卡目录下建立自己的文件:
File file=new File(sdcardDir, "test.txt");
if(!file.exists())
{
	file.createNewFile();
}
FileOutputStream fos=new FileOutputStream(file);
fos.write(edit1.getText().toString().getBytes());
fos.close();
fis.available()返回的是输入流的可读字节数
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
	File sdcardDir=Environment.getExternalStorageDirectory();
	File file=new File(sdcardDir, "test.txt");
	FileInputStream fis=new FileInputStream(file);
	byte buffer[]=new byte[fis.available()];
	fis.read(buffer);
	edit2.setText(new String(buffer));


(3)SQLite

内嵌在手机的数据库,实际上也是一个文件,所有资料全部保存在这个单文件中,文件名为*.db

创建数据库:

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
	File sdcardDir=Environment.getExternalStorageDirectory();
	File dbfile=new File(sdcardDir, "database.db");
	SQLiteDatabase db=SQLiteDatabase.openOrCreateDatabase(dbfile, null);
SQLiteDatabase的静态方法openOrCreateDatabase(File,null);创建或者打开数据库

生成表:

String sql="create table UserTb1(_id integer primary key autoincrement,username text,password text)";
db.execSQL(sql);

插入记录:

sql="insert into UserTb1(username,password) values('apple','123')";
db.execSQL(sql);
sql="insert into UserTb1(username,password) values('banana','111')";
db.execSQL(sql);

删除记录:

sql="delete from UserTb1 where _id=1";
db.execSQL(sql);

查询记录:

Cursor cursor=db.query("UserTb1", null, null, null, null, null, null);
			if(cursor.moveToFirst())
			{
				for(int i=0;i<cursor.getCount();i++)
				{
					res+=cursor.getInt(0)+" ";
					res+=cursor.getString(1)+" ";
					res+=cursor.getString(2)+" \n";
					cursor.moveToNext();
					
				}
			}
			TextView showTextView=(TextView)findViewById(R.id.show);
			showTextView.setText(res);
Cursor类就相当于一个结果集,有很多move的方法使得当前针对于某一条记录,然后调用getXxx(index)来获取某条记录的index列的数据
SQLiteDatabase.query(String table,后面全是null);获取的就是整个表的数据了,另外还有一个rawQuery("SQL的select语句",null);返回的就是Cursor类对象,也可以用于查询




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值