Storage Options
来源:互联网 发布:青年网络公开课腾讯 编辑:程序博客网 时间:2024/04/29 12:20
Shared Preferences:以key-value配对的方式存储
Internal Storage:在设备的存储空间上存储私有数据
External Storage:在外部存储设备上存储公用的数据
SQLite Databases:存储结构话的数据在私有的数据库中.
Network Connection:在网络服务器上存储数据
Shared Preferences:
sharedPreferences 类提供一个框架运行你存储和读取存储以key-value配对的方式存储永久存储器上的数据。数据的类型包括:booleans,ints,longs,和strings。
要在application中使用sharePreference,需要下面两个函数中的一个。
SharedPreferences getSharedPreferences (String name, int mode) 可以被其他application 用name来访问.
SharedPreferences getPreferences (int mode) 只在你的Activity中方位,不需要提供name.
1:呼叫edit(),获得一个SharedPreferences.Editor
2:通过putBoolean()/ putString()存储数据
3:call commit()提交改动
读的话调用getBoolean()/getString()
public class Calc extends Activity {
public static final String PREFS_NAME = "MyPrefsFile";
@Override
protected void onCreate(Bundle state){
super.onCreate(state);
. . .
// Restore preferences
//使用两个参数的接口,可与被其他Activity 用name访问
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();
}
}
举例如下:
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();
}
}
你也可以以文件的形式将数据存在设备的内部存储空间上.默认情况下这种方式保存的文件只能在application 内
部访问,不能被其他application 访问,当application 卸载时,保存的文件会被删除.
可以调用openFileOutput,第一个参数是filename,第二个是mode(MODE_PRIVATE/MODE_APPEND/MODE_WORLD_REABEL/MODE_WORLD_WRITEABLE).打开文件后,调用write 命令或者read。完成后close文件.
String FILENAME = "hello_file";
String string = "hello world!";
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
如果你只是想把数据存到dram中作为cache来使用,你可以调用getCacheDir()来打开一个文件。当系统的dram 不足时,cache文件可能会被删掉。
getFileDir():返回存在内部存储文件的绝对路径.
getDir():创建或者打开一个存储在内部存储器上的文件.
deleteFile():删除内部存储器上的文件.
fileList():返回存储文件的数组.
你也可以把数据存到SD 卡上,这时候需要在manifest文件中申明权限。WRITE_EXTERNAL_STORAGE这个权限也保证有对SD 的读权限.
<manifest ...>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
</manifest>
在你往SD 卡上写东西的时候应该要检测SD是否MOUNT状态,如下所示。
/* 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;
}
如果只是读的话,只要check是否READ_ONLY即可.
/* 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;
}
如果是通过getExternalStoragePublicDirectory 返回的目录可以被其他application 访问,例如DIRECTORY_MUSIC等.
也自己自建目录.
public File getAlbumStorageDir(String albumName) {
// Get the directory for the user's public pictures directory.
File file = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), albumName);
if (!file.mkdirs()) {
Log.e(LOG_TAG, "Directory not created");
}
return file;
}
通过getExternalFileDir()得到的目录是application 私有的目录,其他application 不能访问.
也可以通过调用GetExternalCacaheDir()将cache文件放到SD 中.
可以通过SQLite 开存application 私有的数据.一般要实现SQLiteOpenHelper的子类,并重新onCreate方法,如下所示:
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);
}
}
通过getWritableDatabase 和 getReadableDatabase来读写data base,可以通过SQLiteDatabase query来查询数据.
- Storage Options
- Storage Options
- Storage Options
- Ehcache Storage Options
- Ehcache Storage Options
- android之Storage Options
- android-Storage Options
- Designing Data Storage Architecture-Azure Storage Options
- Android Storage Options(存储方式)
- Storage Options(数据存储)
- 【Android API Guides 简译(三)】Data Storage--Storage Options
- 【安卓】Android API 指南之数据存储(Data Storage)之存储选项(Storage Options)
- options
- Options
- options
- OPTIONS
- options
- options
- Android BLE Beacon的探索
- 管理修改
- 如何发现优秀的开源项目?
- socket 通过 ioctl获取 设置 网卡 IP 子网掩码 本地广播地址
- POJ-2251 Dungeon Master
- Storage Options
- postman断言解析
- 热力学与图像处理
- Android异常总结
- CTDB运行调试
- opencv版本记录
- UVA 11624 Fire!【BFS】
- Spring搭建Demo
- 开发工具、网站