Android手机数据保存的方式及注意事项
来源:互联网 发布:mac准备安装时发生错误 编辑:程序博客网 时间:2024/05/24 06:03
一.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 blocke.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 blocke.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}@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubdb.execSQL(CREATE_TABLE_SQL);Log.i("mi", "执行onCreate方法");}@Overridepublic 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();}
0 0
- Android手机数据保存的方式及注意事项
- Android手机数据保存方式
- android sharedpreferences保存数据注意事项
- android 数据保存方式
- Android android下的数据持久化和读取数据,保存数据到手机及SD卡
- Android api 数据的保存方式
- android SharedPreferences 手机保存数据的简单方法
- Android轻量级数据保存方式
- Android中常用的有四种保存数据的方式
- android手机端保存xml数据
- android保存数据到手机储存
- android保存到手机内存【数据存储】
- [Android]数据保存及读取
- SharedPerferences 保存数据,android提供用于保存简单配置信息,标记,用户数据的一种方式
- 获取android手机分辨率及相应的处理方式
- android中Json数据保存方式
- Android 用文件存储方式保存数据
- Android-在手机本地保存数据和读取数据
- MTK Android Driver知识大全
- 猫猫学IOS(三十九)UI之核心动画之CABasicAnimation(基础动画)
- linux找文件
- GitHub 优秀的开源项目学习
- Linux 程序管理
- Android手机数据保存的方式及注意事项
- ipa打包
- 安卓来电秀简单实现
- App开发日报 2015-05-07 如何纯手码写AutoLayout
- linux多线程下互斥量与信号量的区别
- Java基础——继承
- 防止ViewPager中的Fragment被销毁的方法
- iOS/mac开发的一些知名个人博客
- Spring MVC+mongodb实践