Android 数据存储

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. 要创建私有文件并写入到内部存储:

  1. 使用文件名称和操作模式调用 openFileOutput()。 这将返回一个 FileOutputStream。
  2. 使用 write() 写入到文件。
  3. 使用 close() 关闭流式传输。
String FILENAME = "hello_file";
String string = "hello world!";

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();

2. 要从内部存储读取文件:

  1. 调用 openFileInput() 并向其传递要读取的文件名称。 这将返回一个 FileInputStream。
  2. 使用 read() 读取文件字节。
  3. 然后使用 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

  1. 获取SQLiteOpenHelper实现的实例
  2. 通过实例的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");

5. 网络连接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章