2012-04-09 11 views
0

次のように私の仕事の流れは次のとおりです。パスデータが、他の活動に行き、後

LoginActivity - > ActivityB - > ActivityC - > ActivityD

私は、データを渡したいのですがLoginActivityからActivityDまで、アクティビティDには直接アクセスしません。つまり、LoginActivityのデータをActivityDに渡したいのですが、ActivityDにアクセスしてデータを取得する前にActivityBとActivityCに移動します。

これは可能ですか?次のように

私は別のコードを1つの活動からのデータを渡すために知っているのです:

 Intent i = new Intent(getApplicationContext(), AnotherActivity.class); 
     i.putExtra("key", (int)1); 
     i.putExtra("something", something); 
     startActivity(i); 

そしてAnotherActivityには、データを取得するために、次の手順を実行します

 Bundle extras = getIntent().getExtras(); 
     if(extras !=null) 
     { 
      String var = extras.getString("something"); 
     } 

しかし、これにはありません私がその活動に直進するのを遅らせたいのであれば、仕事をしてください。だから私がstartActivity(i);を取り出して別の活動に行くなら。最後のアクティビティでデータを取得すると、プログラムがクラッシュします。古いNullPointerExeptionがポップアップします。

誰も私が説明したことをやる方法を知っていますか?あるアクティビティから別のアクティビティへデータを取得しますが、すぐにそのアクティビティを開始(または開始)しないでください。

答えて

2

このようにデータを渡す場合は、共有設定を使用することをお勧めします。 使い方が簡単で、プログラム内のどこにでもデータを使用できます。

SharedPreferences.Editor editor = prefs.edit(); 
editor.putString("key", (int)1); 
editor.putString("something", something); 
editor.commit(); 

受信時:

SharedPreferences prefs = getSharedPreferences(prefName, MODE_PRIVATE); 
String something = prefs.getString("something", null); 
+0

優れています。助けてくれてありがとう...それは私が必要とするものを正確に行った。毎日私はAndroidについて何か新しいことを学んでいます。 – Zolt

0

は、あなたはいつもあなたにいくつかの詳細を与えること

•A singleton pattern to share the date across multiple non-consecutive activities. 

•A shared preference. 

•An external storage 

•Entry into db. 

•passing data with intents. 

このlinkのためにこれらのいずれかを使用することができます。

0

私は、あなたの問題を解決するための2つのオプションが考えられます。一つは、あなただけ(私はより実用的だと思います)、他のオプションが静的なメンバで別々のクラスを作成することであるあなたは、コード

Intent i = new Intent(getApplicationContext(), AnotherActivity.class); 
i.putExtra("key", (int)1); 
i.putExtra("something", something); 
startActivity(i); 

を実行する必要がACtivityBとACtivityCに意味し、データを渡しておくと、ということですデータにアクセスするための静的メソッド。それはあなたがアクセスし、適切な予防措置を講じmutlithreadedしている場合ので、あらかじめご了承スレッドセーフこのクラスは、必ずしもではないであろうこの

public class SharedResource{ 
public static String mPassedName; 
} 

のようになります。

0

次の2つのアプローチによってそれを行うことができます。 1)共有環境

SharedPreferences.Editor editor = prefs.edit(); 
editor.putString("key", "Value"); 
editor.commit(); 

//共有県をフェッチ

2)アプリケーションレベルのクラスを定義し、同じアクセスをします。

クラス変数のゲッター関数とセッター関数で構成されます。 1つのアクティビティで設定し、別のアクティビティに入る。