2012-04-09 42 views
0

我的工作流程如下:傳遞數據,只好到其他活動後

LoginActivity - > ActivityB - > ActivityC - > ActivityD

我想傳遞數據從LoginActivity到ActivityD,但不直接進入ActivityD。即,我想將數據從LoginActivity傳遞到ActivityD,但在到達ActivityD並獲取數據之前,請轉到ActivityB和ActivityC。

這可能嗎?

我知道從一個活動傳遞到另一個數據的代碼如下:

 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 2012-04-09 18:03:11

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

我可以想出兩個選擇來解決您的問題。其中之一是,你只是保持傳遞數據,這意味着在ACtivityB和ACtivityC你需要運行的代碼

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

其他選項(我認爲這是更實際的)是創建帶有靜態成員一個單獨的類用於訪問數據的靜態方法。它可能是這個樣子

public class SharedResource{ 
public static String mPassedName; 
} 

這個類就不一定是線程安全的所以事先警告,如果你有mutlithreaded訪問採取適當的預防措施。

0

您可以通過兩種方式做到這一點。 1)共享偏好

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

//獲取共享縣。

String value = pref.getString("key" , ""); 

2)定義應用程序級別並訪問它。

類由變量的getter和setter函數組成。 在一項活動中設置並進入另一項活動。

相關問題