1

Application Object で苦労した後、GSON ライブラリと Sharedpreferences を使用してアクティビティ間でデータを交換する (新しい?) アイデアを思いつきました。これには、アプリがシャットダウンされてもオブジェクトが破棄されないという大きな利点があります。

私はあなたがどのように考えているか知りたいです

  1. 安全
  2. パフォーマンス
  3. アプリの安定性

これが私がすることです。最初に MyExchanger クラスを作成します

 public class MyExchanger {
    //store your variables here
     String name;
     List<Vokabel> vokabeliste;

 //put your GETTERS und SETTERS HERE (or make them public)

}

そして、魔法が起こるヘルパークラス

public class ExchangerUtils {

        Context context;
        SharedPreferences prefs;
        SharedPreferences.Editor editor;
        Resources res;
        Gson gson;
        Type type ;


        public ExchangerUtils(Context context) {

                this.context = context;
                prefs = PreferenceManager.getDefaultSharedPreferences(context
                                .getApplicationContext());
                res = context.getResources();
                type = new TypeToken<MyExchanger>() {
                }.getType();
        }

        public void updateExchanger(MyExchanger exchanger) {

                gson = new Gson();
                String exchangerjson = gson.toJson(exchanger, type);
                editor = prefs.edit();
                editor.putString(res.getString(R.string.key_exchanger), exchangerjson);

                editor.commit();

        }

        public Exchanger getExchanger(){

                String exchangerjson = prefs.getString(res.getString(R.string.key_exchanger), null);
                Gson gson = new Gson();
                if(exchangerjson!=null){
               My Exchanger exchanger = gson.fromJson(exchangerjson, type);

                return exchanger;
                }

                return new MyExchanger();
        }

}

実装は次のようになります

//Somewhere in the activity

ExchangerUtils utils = new ExchangerUtils(this);
MyExchanger exchanger = utils.getExchanger();

exchanger.setName("a name");
utils.update(exchanger);

2 つのアプリでテストしましたが、古い電話や多くのオブジェクト (>100) でも問題なく動作します。

実装で唯一重要なことは、オブジェクトを更新する必要があることです。このメソッドなしでこれを行う方法はありますか?

改善のための提案があれば、お気軽に投稿してください。

4

2 に答える 2

4

あなたが説明したのと同じ方法で、データを非常に簡単に永続化するライブラリを作成しました: DroidPrefs

値の保存と読み込みは非常に簡単ですが、TypeToken を使用したヘルパー クラスなどについて心配する必要はありません。

この POJO から

public class Animal
{
    private String mName;
    private String mBreed;
    private int mLegs;

    public Animal() {
        mName = "";
        mBreed = "";
        mLegs = 0;
    }

    public Animal(String name, String breed, int legs)
    {
        mName = name;
        mBreed = breed;
        mLegs = legs;
    }
}

オブジェクトを保存

Animal newAnimal = new Animal("Gitty", "Octocat", 8);
DroidPrefs.instance(context).put("animal", newAnimal).apply();

オブジェクトの読み込み

Animal newAnimal = DroidPrefs.instance(context).get("animal", Animal.class);

オブジェクトが以前にシリアル化されていない場合は、既定のコンストラクターを使用して新しいオブジェクトが作成されます。

于 2013-06-20T06:48:53.477 に答える