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. 網絡連接

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