1. SharedPreferences
SharedPreferences轻量级 格式简单 以键值对的形式存在XML中 一般用于存储配置信息、个人偏好
public class Calc extends Activity {
public static final String PREFS_NAME = "MyPrefsFile";
@Override
protected void onCreate(Bundle state){
super.onCreate(state);
// Restore preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getBoolean("silentMode", false);
setSilent(silent);
}
@Override
protected void onStop(){
super.onStop();
// We need an Editor object to make preference changes.
// All objects are from android.context.Context
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("silentMode", mSilentMode);
// Commit the edits!
editor.commit();
}
}
2. 内部存储
默认情况下,保存到内部存储的文件是应用的私有文件,其他应用(和用户)不能访问这些文件。 当用户卸载您的应用时,这些文件也会被移除。
1. 要创建私有文件并写入到内部存储:
- 使用文件名称和操作模式调用 openFileOutput()。 这将返回一个 FileOutputStream。
- 使用 write() 写入到文件。
- 使用 close() 关闭流式传输。
String FILENAME = "hello_file";
String string = "hello world!";
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
2. 要从内部存储读取文件:
- 调用 openFileInput() 并向其传递要读取的文件名称。 这将返回一个 FileInputStream。
- 使用 read() 读取文件字节。
- 然后使用 close() 关闭流式传输。
3. 外部存储
1. 获取外部存储的访问权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2. 检查外部存储是否可用
/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state) ||
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
return true;
}
return false;
}
3. 建议:一般APP的文件路径:/mnt/sdcard/Android/data/包名/子目录
这样做数据文件就相当于和app绑定在了一起,卸载后,数据也会跟着删除掉,而放在其他目录下的文件则不受卸载的影响。
4. 创建
File sdRoot = Environment.getExternolStorageDirectory();
File appRoot = new File(sdRoot, "Android/data/"+getPackageName());
if(!appRoot.exists()){
appRoot.mkdirs();
}
4. SQLite数据库
1. 继承 SQLiteOpenHelper
public class DictionaryOpenHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 2;
private static final String DICTIONARY_TABLE_NAME = "dictionary";
private static final String DICTIONARY_TABLE_CREATE =
"CREATE TABLE " + DICTIONARY_TABLE_NAME + " (" +
KEY_WORD + " TEXT, " +
KEY_DEFINITION + " TEXT);";
DictionaryOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DICTIONARY_TABLE_CREATE);
}
}
2. 封装crud
- 获取SQLiteOpenHelper实现的实例
- 通过实例的getWritableDatabase() 和 getReadableDatabase()来获取数据库的 SQLiteDatabase 对象db,该对象提供操作数据库的方法
说明:当储存空间不足时,getWritableDatabase()会抛出异常,需要catch
当Activity结束时,需要关闭数据库
public void finish(){
if(db.isOpen()){
db.close();
}
super.finish();
}
增
db.insert(表名, null, 数据);
删
db.delete(表名, "name like ?", new String[]{"test%"});
delete from cust where name like 'test%';
改
db.update(表名, 数据, "name = ?", new String[]{"brad"});
update cust set name='赵', birthday='1999-01-01' where name='brad'
查
Cursor cursor = db.query(表名, null, null, null, null, null, null);
while(cursor.moveToNext()){
cursor.getString(cursor.getColumnIndex("id"));
}
getCount();//获取查询结果数量
参数说明(表名,查询字段数组,条件,条件值数组,group by,having,order by)
例子:
selete id, name, birthday from cust where id>4 order by = id;
db.query("cust", new String[]{"id","name","birthday"}, "id > ?", new String[]{"4"}, null, null, "id");