2012-02-08 3 views
0

私はアプリ内で2つのアクティビティを持っています:A & B.アクティビティAには、B(現在共有設定)が保存したデータが必要です。しかし、アクティビティAのデータを照会するには、Bのコンテキストが必要です。しかし、アクティビティAにはアクティビティBのコンテキストを取得する方法はありません(アプリケーションフローに従って)。どのような方法がありますか、またはデータベースを使用して、より良いオプションになりますか?SharedPreferencesまたはDatabase?

答えて

5

SharedPreferencesに保存する場合は、アクティビティBのコンテキストは必要ありません。アクティビティAのコンテキストは、アプリのSharedPreferencesにアクセスすることができます.AppのSharedPreferencesは、アプリに対して「グローバル」です。データベースを必要とする場合、あなたはデータは、あなたが保管されていたものを言いませんでした規定するよう

コード例

ActivityA.this.getSharedPreferences("SOMETHING", MODE_PRIVATE); 

。したがって、伝えることは不可能です。

4

なぜアクティビティAのコンテキストが必要ですか? SharedPreferencesを保存/取得するには、各アクティビティ内でgetApplicationContext().getSharedPreferences()を使用します。

また、保存しているデータによっては、インテントを使用してアクティビティAからアクティビティBにデータを渡すことができます。たとえば、アクティビティBをAから開始するには、次のようなものを使用します。

Intent i = new Intent(getApplicationContext(), ActivityB.class); 
i.putExtra("someIntData",1234); 
i.putExtra("someStringData","yourdata"); 
startActivity(i); 

そして、あなたはあなたができるActivityB内のデータを必要な場所:あなたはSharedPreferencesやデータベースとファイルシステムをヒットする必要はありませんので

int yourIntData = getIntent().getIntExtra("someIntData",0); 
String yourStringData = getIntent().getStringExtra("someStringData"); 

これは速くなります。

1

すべてのデータをSharedPreferencesに保存することができ、アプリケーションのすべてのアクティビティからアクセスできます。

は、同じようにそれを行うのここで説明:あなたがいずれかの活性を有する

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 

を使用することができ、それは関係なく、どのアクティビティあなたの、あなたのアプリのパッケージ名に縛らSharedPreferencesオブジェクトを返します http://developer.android.com/guide/topics/data/data-storage.html#pref

2

コンテキストとして渡す。

また、共有設定の名前を選択してアクティビティのgetSharedPreferencesメソッドに渡すこともできます(Sam_DとGrahamの回答で指摘されているように)。

関連する問題