2016-09-07 4 views
0

私はAndroidを学ぶiOS開発者です。ベストプラクティスに従っていることを確認したいと思います。すべてのアクティビティに表示されるようにカスタムオブジェクトを保存するのに最適な場所

私は、1 - > m個のアクティビティでアクセス可能である必要があり、アプリケーションが終了するときに保存する必要があるカスタムオブジェクトを持っています。現在、私はそれらを保存するためにSharedPreferencesコードを使用していますが、それが最善のルートかどうかはわかりません。シングルトンを使うべきですか?より良い方法がありますか?

SharedPreferences mPrefs = getPreferences(MODE_PRIVATE); 
Editor prefsEditor = mPrefs.edit(); 
Gson gson = new Gson(); 
String json = gson.toJson(userProfile); 
prefsEditor.putString("UserProfile", json); 
prefsEditor.commit(); 

gson = new Gson(); 
json = mPrefs.getString("UserProfile", ""); 
UserProfileObject outObject = gson.fromJson(json, UserProfileObject.class); 

答えて

2

シングルトンは、アプリケーションの終了時に保存されません。本当にあなたのオプションは:

* SharedPreferencesです。少数のキー/値のペアに適しています

*データベース。リレーショナルデータに適しています

*好きなフォーマットでディスクにファイルします。任意の量のデータには適していますが、カスタムパーサーを作成する必要があります。

共有設定でjsonを保存するのは少し奇妙です。あなたがそこにたくさんの鍵を格納していない限り、それは恐ろしいことではありませんが、あなたがファイルを書く方法を知らなかったように見えます。

+0

私はアンドロイドの開発を学ぶことで自分のやり方を探っています。私はファイルを書く方法を理解することができます。ありがとうございました – user1079052

0

@Gabeは良い答えを提供しました。私はそれに2セントを追加しています

私は個人的には、シリアライズされたデータをSharedPreferencesに保存したくありません。代わりに、私はそれを格納するためにSQLiteやRealmのようなローカルのdbストレージを使います。シリアライゼーション/デシリアライゼーションの理由は、リフレクションを使用してオブジェクトをマーシャリング/アンマーシャリングすることで、パフォーマンスに悪影響を与える可能性があります。要するに

、あなたのUserProfileObjectが簡単にJSONから構築することができ、それは機密データが含まれていない場合は、単純なデータ

私が思う
0

を格納するための複雑な/リレーショナルデータとSharedPreferencesを格納するための使用ローカルデシベル(すなわちパスワード) SharedPreferences(ちょうどあなたがやっているようなjsonの文字列を保存する)でそれを持っているかもしれません。

シングルトンSessionManager/ProfileManagerクラスを使用すると、これで十分です。 1 - > mのアクティビティで使用されるかもしれませんが、シングルトンを使用した場合はSharedPreferencesに一度しか当てはまりません。データのコピーをシングルトンに保存し、変更があった場合はSharedPreferencesに同期させてください。または、シングルトンを一括してダンプし、必要なときにいつでもSharedPreferencesを打つだけです(コピーを同期させることについての心配は少ない)が、ユースケースがそれほど多くを打ち負かすとは思わない。

関連する問題