2012-04-12 7 views
2

ウェブサイトのショッピングカートのように、いくつかのアクティビティ間でデータを利用したいと考えています。アンドロイドでのアクティビティ間のデータの保存方法ショッピングカート

このデータはおそらくリスト、地図などの文字列の集合である可能性があります。各項目には、ID、数量、種類、テキストのメモが関連付けられている必要があります(最後のものについてはまだわかりません)

重要なことは、セッションが終了してから永続化する必要はないという点です。全体のセッションで何度も削除して再作成してください。

質問があります: SharedPreferences?、データベースを使用するのに最適ですか?

ありがとうございます!

答えて

3

ファクトリオブジェクトを介して配置されたシングルトンのJavaコレクション(マップまたはリスト)がさらに優れています。ただ、そこにあなたのカートを保存し、プリファレンスを使用することを決定した場合は、すべての

でデータベースや好みを気にしない、私は私の小さなデータバインディングライブラリをrecommentことができます。

https://github.com/ko5tik/andject

+0

は、通常、これは私がいずれかを格納することに加えて、一緒に行くのソリューションですデータ私はデータベースや共有の設定を保持しておきたいと思います。 –

+0

カスタムオブジェクトのコレクションを含むクラスを作成することを意味しますか? – giorgiline

+1

これを行うこともできますし、アプリケーションオブジェクトにコレクションを保存することもできます(http://developer.android.com/reference/android/app/Application.html) –

0

Use Bundleや意図を。

この目的でデータベースを使用することはお勧めしません。データベースを適切に開閉する必要があります。データがアクティビティの周りを渡される場合、そのアクティビティがデータベースを最後に閉じるべきであり、リークを引き起こす可能性があります。あるアクティビティーから別のアクティビティーにこれらのデータを渡すだけの場合は、バンドルを作成し、次のアクティビティーを開始するときにインテントにそれを添付します。

0

SharedPreferencesは、単純なキーと値のペアと少量のデータを保存するのに最適ですが、あなたのショッピングカートのオブジェクトはそれより少し複雑かもしれません。そのため私はたぶんSQLiteデータベースを使用します。あなたは複雑なデータを持っていないし、いくつかの単純なものを保存したい場合は、共有環境設定で行う必要があります。

+0

はい、私は共有の設定を破棄する必要があります – giorgiline

0

SharedPreferencesはキーと値のペアですが、AndroidのデータベースはSQLiteのままですが、セッションの後は両方とも保持されます。 SQLiteデータベースで任意の数の操作を実行し、次のセッションでも同じファイルを使用できます。 特定のユースケースについてさらに明確にする必要がある場合は、回答にコメントを付けることができます。

1

最も簡単な方法は、public static変数が宣言されたクラスを使用し、任意のアクティビティからそれらを設定し、静的な参照、つまりMyContantsClassを呼び出すだけで他のアクティビティの値を保存することです。最初の活動に

class MySessionVars 
{ 
     public static int MyVar1; 
} 

{ 
    MySessionVars.NyVar1=10; 
} 

や他のアクティビティから

{ 
    Var = MySessionVars.NyVar1; 
} 

ようStaticVar1はこれが最も簡単な方法であると保持しますそれまではアプリが

0

人々が話すことが閉じられているvarsはグローバルなデータを作成したり、sharedpreferenceに値を格納することについては私の経験によると、simpあなたの変数やarraylistsとpublic staticとして宣言された別のクラスを作成して、classname.variableの名前を参照するだけでプロジェクト全体でそれらを使用するのは避けてください。あなたの活動 global.myのいずれかの

class global

{ 
    public static arrayList<String> my; 
} 

これは私がこれまでに見つかった最も簡単な方法です!

1

Gson(Google提供)を使用して、データオブジェクトアクティビティ、さらにはクラスオブジェクトを送受信できます。


送信:(FirstActivity)

Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 
Gson gson = new Gson(); 
intent.putExtra("CustomClassObject", gson.toJson(object)); 
startActivity(intent); 

は受信:(SecondActivity)

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_second); 
    Bundle extras = getIntent().getExtras(); 
    if (extras != null) 
    { 
     Gson gson = new Gson(); 
     CustomClass object = gson.fromJson(extras.getString("CustomClassObject"), CustomClass.class); 
    } 
    //... 
} 
関連する問題