データの保存あれこれ

[edit]

データの保存

[edit]

プリファレンス

保存

 SharedPreferences pref = getSharedPreferences("pref",MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE);
 Editor e = pref.edit();
 e.putString("key", "value");
 e.commit();

取得

 SharedPreferences pref = getSharedPreferences("pref",MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE);
 String str = pref.getString("key", "存在しないときの初期値"));

ぜんぶけす

 editor.clear().commit();
  • MODE_WORLD_READABLE:他のアプリから読み取り可能
  • MODE_WORLD_WRITEABLE:他のアプリから書込み可能
  • MODE_PRIVATE:そのアプリケーションだけで使用可能

getString()、getFloat()、getInt()、getLong()、getBoolean()

[edit]

画像の保存

[edit]

SDカード

Environment.getExternalStorageDirectory()でFileインスタンスを取得でき、getPathメソッドでパスを取得します。

 import android.os.Environment;
 Environment.getExternalStorageDirectory().getPath(); 
[edit]

画像の合成(CANVASの保存)

http://isann.blog2.fc2.com/blog-entry-239.html

[edit]

キャプチャを保存

 setDrawingCacheEnabled(true);
 cacheb = Bitmap.createBitmap(getDrawingCache());
 setDrawingCacheEnabled(false);

ハマッたのは、getDrawingCache()メソッドを動かすと、
このメソッドを動かす直前の端末画面に表示されているものをキャプチャするのでは無く、『onDraw、もう1度動いて、その後の結果がキャプチャされます』って言うこと。

データの保存に関してはmanifestに関しても書き込みを可能に変更します。

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
 bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
 bmpCanvas = new Canvas(bmp);
 public void saveToFile() {
 	// 保存先の決定
 	String status = Environment.getExternalStorageState();
 	File fout;
 	if (!status.equals(Environment.MEDIA_MOUNTED)) {
 		fout = Environment.getDataDirectory();
 	} else {
 		fout = new File("/sdcard/DrawNoteK/");
 		fout.mkdirs();
 	}
 	Date d = new Date();
 	String fname = fout.getAbsolutePath() + "/";
 	fname += String.format("%4d%02d%02d-%02d%02d%02d.png",
 						   (1900+d.getYear()), d.getMonth(), d.getDate(),
 						   d.getHours(), d.getMinutes(), d.getSeconds());
 	// 画像をファイルに書き込む
 	try {
 		FileOutputStream out = new FileOutputStream(fname);
 		bmp.compress(CompressFormat.PNG, 100, out);
 		out.flush(); out.close();
 	} catch(Exception e) {}
 }