にすべてのSharedPreferencesをインポートします。 質問は、SharedPreferenceファイルを両方とも外部ファイルに完全にエクスポートして戻すことは可能ですか? (これは、バックアップとデバイス間の移行のために不可欠である)、おかげエクスポートとは、私は2つのSharedPreferenceファイル内のデータ(ブール値、数値や文字列)の異なる種類を持っている私のAndroidアプリでファイル
2
A
答えて
1
これは、私はそれをやった方法です:
private final SharedPreferences _settings;
/**
* Serialize all preferences into an output stream
* @param os OutputStream to write to
* @return True iff successful
*/
public boolean serialize(final @NonNull OutputStream os) {
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(os);
oos.writeObject(_settings.getAll());
oos.close();
} catch (IOException e) {
Log.e(TAG, "Error serializing preferences", BuildConfig.DEBUG ? e : null);
return false;
} finally {
Utils.closeQuietly(oos, os);
}
return true;
}
/**
* Read all preferences from an input stream.
* Schedules a full preference clean, then deserializes the options present in the given stream.
* If the given object contains an unknown class, the deserialization is aborted and the underlying
* preferences are not changed by this method
* @param is Input stream to load the preferences from
* @return True iff the new values were successfully written to persistent storage
*
* @throws IllegalArgumentException
*/
public boolean deserialize(final @NonNull InputStream is) {
ObjectInputStream ois = null;
Map<String, Object> map = null;
try {
ois = new ObjectInputStream(is);
map = (Map) ois.readObject();
} catch (IOException | ClassNotFoundException e) {
Log.e(TAG, "Error deserializing preferences", BuildConfig.DEBUG ? e : null);
return false;
} finally {
Utils.closeQuietly(ois, is);
}
SharedPreferences.Editor editor = _settings.edit();
editor.clear();
for (Map.Entry<String, Object> e : map.entrySet()) {
// Unfortunately, the editor only provides typed setters
if (e.getValue() instanceof Boolean) {
editor.putBoolean(e.getKey(), (Boolean)e.getValue());
} else if (e.getValue() instanceof String) {
editor.putString(e.getKey(), (String)e.getValue());
} else if (e.getValue() instanceof Integer) {
editor.putInt(e.getKey(), (int)e.getValue());
} else if (e.getValue() instanceof Float) {
editor.putFloat(e.getKey(), (float)e.getValue());
} else if (e.getValue() instanceof Long) {
editor.putLong(e.getKey(), (Long) e.getValue());
} else if (e.getValue() instanceof Set) {
editor.putStringSet(e.getKey(), (Set<String>) e.getValue());
} else {
throw new IllegalArgumentException("Type " + e.getValue().getClass().getName() + " is unknown");
}
}
return editor.commit();
}
2
SharedPreferences
あなたが与えられたSharedPreferences
にすべての値を取得するために使用することができますgetAll()
方法があります。それを使用して、外部ファイルの値をシリアル化することができます。
Android 6.0(API 23)以降では、Auto Backup for Appsが自動的に共有設定ファイルをバックアップします。
関連する問題
- 1. 、私はこの種類のPDFファイル名を持つファイル名内
- 2. 私は、文字列の種類持って
- 3. 私はタグや目標を持つファイルを持っている文字列
- 4. 異なる私はマスター値下げファイルを持っている
- 5. 私はアドレスの2種類を持っているのPython
- 6. Javaの文字列は、私は2つの文字列を持っている単語、スペースや特殊文字
- 7. のVBScript - InStr関数と "種類不一致" エラー私はこのような文字列を持っている
- 8. dplyr私は、例えば、数値、文字列値を持つデータフレームを持っている文字列
- 9. ソート私は数字と文字列の配列を持っている数値と文字列
- 10. マージデータフレームは、私は2つのデータフレーム持っている文字列
- 11. 私は、ファイル名の持つ文字列
- 12. カウント別の列の場合は、私は2つのカラムを持つCSVファイル持っている価値
- 13. 数値は、私は、フォーム内のファイル名のリストを持っているパターン
- 14. は、私は2つのファイル持っている親ファイル
- 15. 私は含むこのXMLファイル持っている文字列
- 16. 私は2つのファイルを持っている静的関数
- 17. 私は私のJSP内の1つのクエリ文字列を持っている実際の値に
- 18. は、Java - 私はとの2つの文字列を持っている
- 19. 私は3つの列を持つファイルを持っている
- 20. 違いは、私は2つのファイルを持っている/は、
- 21. チェックプロファイルは、私はプロファイルの2種類を持って私のプロジェクトでは
- 22. 私は、次のデータフレームを持っている年と種類
- 23. は、私は2つのカスタムタスクを持っている私のbuild.sbtファイルで.sbtファイル内のタスクの依存関係
- 24. グループ値と私はcsvファイルに次のデータを持っているのPython
- 25. 2種類の製品タイプの異なる値を持つマゼンタのカスタム属性
- 26. は、なぜ私は、私は2つのphpファイルを持っている
- 27. 私は2つの文字のベクトルを持っているR
- 28. R読書:created_atとは、私は次の列で、私のつぶやきのCSVファイルを持っているNA
- 29. は、私は、次の2つの文字列持つ文字列
- 30. コントロールは、私は2つのコンボボックスを持っている価値