2016-10-30 3 views
1

Androidの設定で環境設定の種類が変更された場合の対処方法は?たとえば、BooleanListPreferenceに変更された場合Androidの共有設定の種類の移行

Googleでは、環境設定のマイグレーションについてはまったく考えていませんか?

唯一の賢明な方法は、バージョンを設定し、特定のバージョンで変更された削除の環境設定をマークするようです。

+2

ただ好みの名前を変更しますか?それが "type_pref"だった場合は、新しい "type_pref1"を呼び出して前の値を無視してください –

答えて

1

ClassCastException例外削除の「古い」キーの場合は、新しいデータ型でキーを読み取り、同じ名前で新しいタイプの新しいキーを作成してみます。

SharedPreferences prefs; 
String key = "key"; 

prefs = PreferenceManager.getDefaultSharedPreferences(this); 

if (prefs.contains(key)) { 
    // key exists, so tetermine it's type 
    try { 
     prefs.edit().get<old_type_name>(key, <default_old_type_value>); 
    } catch (Exceprtion e) { 
     if (e instanceOf ClassCastException) { 
      prefs.edit().remove(key).apply(); 
     } 
    } 
} 

// we are here if no key exists or key removed 
prefs.edit().put<new_type_name>(key, <new_type_value>).apply(); 

と最初のアプリの起動時に一度だけif (prefs.contains(key)) ...をチェックしますか、必要であればこのような何か。

+0

ありがとうございます:-)私はすでに、可能な設定の変更/整合性の問題としてClassCastExceptionの重要性に気付きました。古いキーを削除してデフォルト値で再作成することも私の選択でした:-) – CeDeROM

0

私は生のSharedPreferences上で動作し、PreferenceFragmentを必要としない何かをした:

  • は、設定のバージョンを導入しました。
  • の設定は、両方とも専用のxml文字列でxmlリソースに格納されます。
  • 分割コードを読み込み、移行し、アプリケーションの開始時にデフォルト設定を設定します。
  • 作成された2つの文字列配列バージョンとキー - 設定変更を追跡する - キーはカンマ区切りの文字列です - このインデックスと同じインデックスで、指定されたバージョンの移行に関する情報を保持します。
  • が格納されている設定から現在のバージョンをチェックし、その現在のバージョンが古い(少ない数)の場合、文字列配列に格納されたバージョンに対して検証次いで(文字列分割必要)同じインデックスを持つキー列アレイに設けられたキーを削除し、再それらをデフォルト値で作成します。

これは純粋に文字列をXMLリソースとコードの変更なしに基づいて、私の設定の移行の素敵な方法を提供し、ユーザーは

:-)頻繁にアプリケーションを更新しなかった場合も、それがステップにより、以下のすべてのバージョンを段階を移行する必要があります

最近の変更のユーザーレビューで最近の移行をマークすることもお勧めします..

関連する問題