My Photo

« Androidアプリ開発メモ009:Google Mapsの利用 | Main | どうやって帰ろうか »

August 06, 2011

Androidアプリ開発メモ010:プリファレンス、ファイルアクセス

アプリケーションの設定などをローカルに保存、参照できる。プリファレンスの実体はXMLファイル。
SharedPreferenceのインスタンスをContext#getSharedPreferences()で取得して使用する。
プリファレンスには名前があり、プリファレンスはキーと値の組み合わせを複数保持する。

android.content.Contextクラス
public abstract SharedPreferences getSharedPreferences(String name, int mode)
名前とモードを指定してプリファレンスを取得する。
引数:
  name  プリファレンスの名前
  mode  MODE_PRIVATE:このアプリからだけ読み書きできる
        MODE_WORLD_READABLE:他のアプリから読める
        MODE_WORLD_WRITEABLE:他のアプリが書き込める

値の変更にはSharedPreferences.Editorを使用する。インスタンスはSharedPreferences#edit()で取得する。
Editorに対してputXXX()で値を設定する。また値をすべて削除するにはclear()を使用する。
変更をcommit()でコミットする。
android.content.SharedPreferencesクラス
public abstract SharedPreferences.Editor edit()
新しいEditorを生成する。

android.content.SharedPreferences.Editorクラス
public abstract SharedPreferences.Editor putXXX(String key, データ型 value)
「XXX」の部分はBoolean,Int,Long,Float,String。
「データ型」はboolean,int,long,float,String。

android.content.SharedPreferences.Editorクラス
public abstract SharedPreferences.Editor clear()
プリファレンスからすべての値を削除する。

値の取得はSharedPreferences#getXXX()を使う。
android.content.SharedPreferencesクラス
データ型 getXXX(String key, データ型 defValue)
「データ型」はboolean,int,long,float,String。
「XXX」の部分はBoolean,Int,Long,Float,String。

値の設定、取得のサンプルコード。
private void setIntValue(int value) {
  SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
  SharedPreferences.Editor editor = prefs.edit();
  editor.putInt(MY_KEY, value);
  editor.commit();
}

private int getIntValue() {
  SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
  return prefs.getInt(MY_KEY, DEF_VALUE_INT);
}

ファイルアクセス

Androidはローカルのストレージに対するアクセスに制限があり、アプリごとに決まったフォルダ
/data/data/<アプリのパッケージ名>/files
にのみアクセスできる。このフォルダにあるファイル(リファレンスでは"private file associated with this Context's application package"とある)にファイルの場所を意識せずアクセスするために、ContextクラスのopenFileInput()、openFileOutput()などが用意されている。
#Activityで実際に利用するのはandroid.content.ContextWrapperの実装。

public FileInputStream openFileInput(String name)
読み込み用にファイルをオープンする。
引数:
  name  ファイル名。パスセパレータを含むことはできない。
戻り値:
  "/data/data/<アプリのパッケージ名>/files/<name>"への入力ストリーム

public abstract FileOutputStream openFileOutput (String name, int mode)
書き込み用にファイルをオープンする。
引数:
  name  ファイル名。パスセパレータを含むことはできない。
  mode  MODE_PRIVATE。デフォルト。
    MODE_APPEND
    MODE_WORLD_READABLE
    MODE_WORLD_WRITEABLE
戻り値:
  "/data/data/<アプリのパッケージ名>/files/<name>"への出力ストリーム

public boolean deleteFile(String name)
ファイルを削除する。
引数:
  name  ファイル名。パスセパレータを含むことはできない。
戻り値:
  削除に成功した場合true

public String[] fileList()
ファイル名の配列を取得する。

ファイルの読み書きのサンプル。
private void readFile(String filename) {
  FileInputStream fip;
  String text;
  try {
    fip = openFileInput(filename);
    byte[] buf = new byte[fip.available()];
    fip.read(buf);
    fip.close();
    text = new String(buf);
  } catch (FileNotFoundException e) {
  } catch (IOException e) {
  }
  editText.setText(text);
}

private void writeFile(String filename) {
  FileOutputStream fos;
  try {
    fos = openFileOutput(filename, MODE_PRIVATE);
    fos.write(editText.getText().toString().getBytes());
    fos.close();
  } catch (FileNotFoundException e) {
  } catch (IOException e) {
  }
}

参考:データを簡単に保存する方法(ファイル入出力編) << Tech Booster

« Androidアプリ開発メモ009:Google Mapsの利用 | Main | どうやって帰ろうか »

Androidアプリ開発」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/52407436

Listed below are links to weblogs that reference Androidアプリ開発メモ010:プリファレンス、ファイルアクセス:

« Androidアプリ開発メモ009:Google Mapsの利用 | Main | どうやって帰ろうか »

March 2017
Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof