一.SharedPreference,以键值对的形式保存在xml文件中
少量的数据保存,一般用来保存应用程序的各种配置信息,有两种创建方式:
1. context.getPreferences(Context.MODE_PRIVATE);//创建的xml文件会以当前Activity的名字命名
2. getSharedPreferences("name", Context.MODE_PRIVATE);
Context.MODE_PRIVATE 以此中方式创建, 则只能本应用程序可对xml文件读写
Context.MODE_WORLD_READABLE 以此中方式创建, 其他应用程序可对xml文件只能读不能写
Context.MODE_WORLD_WRITEABLE 以此中方式创建, 其他应用程序可对xml文件能读写
向SharedPreference保存数据后,才会在/data/data/应用包名/shared_prefs 文件夹下创建对应的xml文件
SharedPreferences sp= this.getPreferences(Context.MODE_PRIVATE);
Editor e=sp.edit();
e.putInt("age", 1);
e.commit();
读取xml中的数据信息
int age=sp.getInt("age", 0);
对应的xml文件中内容如下
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<int name="age" value="1" />
</map>
读取其他手机软件的SharedPreference
try {
Context c= createPackageContext("应用程序包名", Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences sp=c.getSharedPreferences("name", Context.MODE_WORLD_WRITEABLE);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
二.保存为文件
1.
// 在/data/data/应用包名/创建files文件夹,在此文件夹下保存应用软件的资源文件,比如下载的图片,视频等
File dir= context.getFilesDir();
// 在/data/data/应用包名/创建cache文件夹 在此文件夹下,可以保存缓存的数据资料
File cache= context.getCacheDir();
保存在这地方的数据,用户在手机的资源管理器(文件管理器)处,无法看到
在手机应用程序设置里面,如图
清除数据:是将/data/data文件夹下的所有数据清除
清除缓存:是将/data/data/cach 文件夹下数据清除
2.保存在sdcard中
注意判断sdcard是否存在
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
}
需要权限
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
下面是向sdcard中的文件中,追加内容的示例代码
try {
File sdcardDir=Environment.getExternalStorageDirectory();
File targetFile=new File(sdcardDir.getCanonicalPath()+"name.txt");
RandomAccessFile raf=new RandomAccessFile(targetFile, "rw");
raf.seek(targetFile.length());
raf.write(new String("日照").getBytes());
raf.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
三.使用SqliteDatabase
这是一个小型数据库,可以通过SqliteDatabase的静态方法创建或获取数据库:
经常通过继承自SQLiteOpenHelper的自定义类获取
public class ScxSqliteOpenHelper extends SQLiteOpenHelper {
public static String CREATE_TABLE_SQL="CREATE TABLE IF NOT EXISTS my(_id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(64),age INTEGER(3),gender CHAR(2))";
public ScxSqliteOpenHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(CREATE_TABLE_SQL);
Log.i("mi", "执行onCreate方法");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
//不加路径的话比如test.db,文件所在的位置会在data/data/应用包名/databases/文件夹下,用户看不到
//加路径比如:/mnt/sdcard/test.db,文件所在的位置就是在sdcard的根目录下,用户可以看到
dbHelper=new ScxSqliteOpenHelper(getActivity(), "/mnt/sdcard/test.db", null, 1);
SQLiteDatabase db=dbHelper.getReadableDatabase();
数据库的常用操作
插入数据,下面是两种实现方式:
public void insert(){
SQLiteDatabase db=dbHelper.getReadableDatabase();
String temp="insert into my(name,age,gender) values(?,?,?)";
String sql="";
for(int i=0;i<10;i++){
Log.i("mi","sql="+temp);
db.execSQL(temp,new String[]{"李"+i,""+(i+3),(i%2==0?"男":"女")});
}
//或者使用这种方式
// ContentValues values=null;
// for(int i=0;i<10;i++){
// values=new ContentValues();
// values.put("name", "李"+i);
// values.put("age", i+3);
// values.put("gender", i%2==0?"男":"女");
// //id 为插入的此条数据的_id或者-1(插入失败)
// long id= db.insert("my",null,values);
// }
}
查询数据
public void select(){
SQLiteDatabase db=dbHelper.getReadableDatabase();
String sql="select * from my";
Cursor cursor=db.rawQuery(sql, null);
//或者
// cursor=db.query("my", null, null, null, null, null, "_id dest");
if(cursor!=null){
String result="";
while(cursor.moveToNext()){
result="";
for(int i=0;i<cursor.getColumnCount();i++){
result+=cursor.getColumnName(i)+":"+cursor.getString(i)+";";
}
Log.i("mi",result);
}
}
}
更新数据
public void update(){
SQLiteDatabase db=dbHelper.getReadableDatabase();
String sql="update my set name=?,gender=? where gender=?";
db.execSQL(sql, new String[]{"joke","男","女"});
//或者使用这种方式
// ContentValues values=new ContentValues();
// values.put("name", "david");
// values.put("gender", "女");
// // num是有多少条数据被改变
// int num= db.update("my", values, "gender=?", new String[]{"男"});
}
删除数据:
public void delete(){
SQLiteDatabase db=dbHelper.getReadableDatabase();
String sql="delete from my where gender=?";
db.execSQL(sql, new String[]{"男"});
//或者使用这种方式
// // num是有多少条数据被改变
// int num= db.delete("my", "gender=?", new String[]{"女"});
}
SqliteDatabase处理事务时的注意事项:
try {
//执行数据的增删改等操作
。。。。
//调用该方法设置事务成功;否则endTransaction()方法将回滚事物
db.setTransactionSuccessful();
} catch (Exception e) {
// TODO: handle exception
}finally{
//由事务标志决定是提交事务还是回滚事务
db.endTransaction();
}