【第二回Android勉強会】データ永続化6. プリファレンス
● プリファレンスの利用
!
● 第一引数 String
ファイル名。任意。
!
● 第二引数 Context(定数)
処理モード
■ MODE_PRIVATE 他アプリからのアクセス不可
■ MODE_WORLD_READABLE 他アプリからの読み込み可
■ MODE_WORLD_WRITABLE 他アプリからの書き込み可
SharedPreferences preferences = getSharedPreferences(FILE_NAME,MODE_PRIVATE);
使わない!!
7. ● データの取得
!
!
● 第一引数 String
取得する型に応じてメソッドは異なる(getInt(),getBoolean() etc…)
!
● 第二引数
キーに指定したデータがなかったときに返す値
プリファレンス
String value = preferences.getString(“KEY”,"Not Found");
9. ● データ消去
● 全て消去
!
!
● 指定したキーを消去
プリファレンス
editor.clear();
Editor.commit();
editor.remove(“KEY”);
Editor.commit();
16. ● DB定義に必要な文字列を定数として宣言しておく
と便利
データベース
public static abstract class DataBaseEntry implements BaseColumns {
public static final StringTABLE_NAME="entry";
public static final String COLUMN_NAME_ENTRY_ID = "entryid";
public static final String COLUMN_NAME_ITEM = "item";
public static final String COLUMN_NAME_VALUE = "value";
}
}
18. ● SQLiteOpenHelperを継承したクラスが実装するメ
ソッド
データベース定義
//onCreate 必須
@Override
public void onCreate(SQLiteDatabase db){
//SQL文を作成してexecSQLメソッド
db.execSQL(SQL_CREATE_ENTRIES);
}
//onUpgrade 必須
@Override
public void onUpgrade(SQLiteDatabase db,int oldversion,int newversion){
}
//onDowngrade 任意
@Override
public void onDowngrade(SQLiteDatabase db,int oldversion,int newversion){
}
予め定義したString型の定数
19. ● Create文の例
データベース定義
private static final StringTEXT_TYPE = "TEXT";
private static final String INTEGER_TYPE = " INTEGER";
private static final String PRIMARY_KEY = " PRIMARY KEY";
private static final String AUTO_INCREMENT = " AUTOINCREMENT";
private static final String COMMA_SEP = ",";
!
private static final String SQL_CREATE_ENTRIES =
"CREATETABLE " + DataBaseEntry.TABLE_NAME + " ("+
DataBaseEntry.COLUMN_NAME_ENTRY_ID+ INTEGER_TYPE +
PRIMARY_KEY + AUTO_INCREMENT+COMMA_SEP+
DataBaseEntry.COLUMN_NAME_ITEM +TEXT_TYPE + COMMA_SEP +
DataBaseEntry.COLUMN_NAME_VALUE + INTEGER_TYPE +
")";
23. データベース データの更新
● ContentValuesクラス
● db.update()
!
!
!
!
!
condition nullの場合はデータすべて更新
db.update(テーブル名,データ,条件,条件に?が含まれる場合ry);
//更新条件
String condition = null;
ContentValues values = new ContentValues();
values.put(DataBaseEntry.COLUMN_NAME_ITEM, item_name);
values.put(DataBaseEntry.COLUMN_NAME_VALUE, item_value);
//データ更新
db.update(DataBaseEntry.TABLE_NAME,values,condition,null);
24. データベース データの取得
● helper.getReadableDatabase()
● db.query(),またはdb.rawQuery()でCursorクラスにク
エリ結果を渡す
db = helper.getReadableDatabase();
Cursor cursor = db.query(DataBaseEntry.TABLE_NAME,columns,null,null,null,null,
DataBaseEntry.COLUMN_NAME_ENTRY_ID);
Cursor cursor =db.rawQuery(
“select item,value from entry where value < ? ;”,
String[]{“500”}
);
25. データベース データの取得
● db.query()
db = helper.getReadableDatabase();
!
//取得する列名
String columns[] = {
DataBaseEntry.COLUMN_NAME_ENTRY_ID,
DataBaseEntry.COLUMN_NAME_ITEM,
DataBaseEntry.COLUMN_NAME_VALUE
};
!
//データ取得
Cursor cursor = db.query(DataBaseEntry.TABLE_NAME,columns,null,null,null,null,
DataBaseEntry.COLUMN_NAME_ENTRY_ID);
26. データベース データの取得
db.query(
テーブル名,
取得する列名,
選択条件(where),
選択条件に?が含まれry,
集計条件(group by),
選択条件(having),
ソート条件(order by)
);
//データ取得
Cursor cursor = db.query(DataBaseEntry.TABLE_NAME,columns,null,null,null,null,
DataBaseEntry.COLUMN_NAME_ENTRY_ID);
36. ファイル
● 内部ストレージ
p アプリからのアクセスのみ
p アプリをアンインストールしてもデータは残る
● 外部ストレージ
p 外からのアクセスが可(WORLD_READABLE)
p アプリをアンインストールした場合の挙動はデータの生成
方法によって異なる(?)
p Manifest.xmlに権限の記述が必要
!
● 基本的にJavaでのファイル操作
37. ファイル 内部ストレージ
● 保存方法の例(内部ストレージの場合)
try{
FileOutputStream stream = openFileOutput(FILE_NAME,MODE_APPEND);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(stream));
!
out.write(“保存内容”);
out.newLine();
out.close();
!
}catch(Exception e){
!
}
38. ファイル 内部ストレージ
● データ読み取り
try{
FileInputStream stream = openFileInput(FILE_NAME);
BufferedReader in = new BufferedReader(new InputStreamReader(stream));
String line = "";
while((line=in.readLine())!=null){
str+=line+"n";
}
in.close();
!
}catch(Exception e){
}
42. References
● AndroidDevelopers - SavingData
http://developer.android.com/training/basics/data-storage/
index.html
!
The Android robot is reproduced or modified from work created and shared by Google and used
according to terms described in the Creative Commons 3.0 Attribution License.