2012-04-09 69 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函数组成。 在一项活动中设置并进入另一项活动。

相关问题