AndroidのSharedPreferencesセーブセットオブジェクト



getSharedPreferences(String str, int MODE)
 
メソッド宣言:
Public SharedPreferences getSharedPreferences(String str, int MODE)
パラメータの説明:
mode:操作モード、3つの選択肢があります.
MODE_PRIVATE:デフォルトでは、呼び出されたアプリケーションのみがアクセスできるファイル(または同じユーザー名を共有するすべてのアプリケーション)を作成します.定数値:0(0 x 00000000)
MODE_WORLD_READALBLE:他のアプリケーションが作成したファイルに対して読み取りアクセスを許可する.定数値:1(0 x 00000001)
MODE_WORLD_WRITEABLE:他のアプリケーションが作成したファイルに書き込みアクセスできるようにします.定数値:2(0 x 000002)
戻り値:優先値の取得または編集に使用できるSharedPreferencesインスタンスオブジェクトを返します.
 
問題の整理:ダイヤルの皮膚を変更するとき、編集に問題が発生しました.
packages/apps/Contacts/src/com/android/contacts/dialpad/DialpadFragment.java:737:
静的コンテキストから非静的メソッドgetSharedPreferences(java.lang.String,int)を参照できません.
        sharedpreference = Context.getSharedPreferences("dialmenu",.......
 
自己直接定義:sharedpreference=
Context.getSharedPreferences("dialmenu",.......
 1.まずgetSharedPreferencesはActivityを継承してのみ使用できます
自分で定義したクラスclass DialpadFragment extends DialMatchFragmentはActivityではありません.
 
 2.静的コンテキストから非静的メソッドを参照できません.
getSharedPreferencesはコンテキスト環境、すなわちcontextに依存するため、どのクラスでもactivityクラスのcontextによって呼び出される必要があります.クラスがactivityで使用されている場合を継承します.
private Context contextを宣言します. 
oncreate()メソッドではcontext=thisを使用できます.
 
クラスがFragmentを継承する場合、
oncreate()メソッドではgetActivity()を使用できます.
     getActivity().getSharedPreferences("dialmenu",.......
***********************************************************************************************************************
次にsharedpreferenceを使用してコレクションオブジェクトをどのように格納するかを見てみましょう.
        public static String SceneList2String(HashMap<Integer, Boolean> hashmap)
			throws IOException {
		//      ByteArrayOutputStream  ,            。
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
		//              ObjectOutputStream
		ObjectOutputStream objectOutputStream = new ObjectOutputStream(
				byteArrayOutputStream);
		// writeObject                ,      readObject        
		objectOutputStream.writeObject(hashmap);
		//   , Base64.encode        Base64     String 
		String SceneListString = new String(Base64.encode(
				byteArrayOutputStream.toByteArray(), Base64.DEFAULT));
		//   objectOutputStream
		objectOutputStream.close();
		return SceneListString;
	}

	@SuppressWarnings("unchecked")
	public static HashMap<Integer, Boolean> String2SceneList(
			String SceneListString) throws StreamCorruptedException,
			IOException, ClassNotFoundException {
		byte[] mobileBytes = Base64.decode(SceneListString.getBytes(),
				Base64.DEFAULT);
		ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
				mobileBytes);
		ObjectInputStream objectInputStream = new ObjectInputStream(
				byteArrayInputStream);
		HashMap<Integer, Boolean> SceneList = (HashMap<Integer, Boolean>) objectInputStream
				.readObject();
		objectInputStream.close();
		return SceneList;
	}

	public static boolean putHashMap(Context context, String key,
			HashMap<Integer, Boolean> hashmap) {
		SharedPreferences settings = context.getSharedPreferences(
				PREFERENCE_NAME, Context.MODE_PRIVATE);
		SharedPreferences.Editor editor = settings.edit();
		try {
			String liststr = SceneList2String(hashmap);
			editor.putString(key, liststr);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return editor.commit();
	}

	public static HashMap<Integer, Boolean> getHashMap(Context context,
			String key) {
		SharedPreferences settings = context.getSharedPreferences(
				PREFERENCE_NAME, Context.MODE_PRIVATE);
		String liststr = settings.getString(key, "");
		try {
			return String2SceneList(liststr);
		} catch (StreamCorruptedException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

以上の方法で行った変換は,putHashMap()はオブジェクトを格納し,getHashMap()は集合オブジェクトを取得する. 
その他はあまり紹介しないで、みんなが持ってきて直接使うのに便利です.