将数据从一个活动传递到另一个活动,但稍后转到另一个活动
我的工作流程如下:
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);
然后去另一个活动。 当tyring获取最终活动中的数据时,程序崩溃。 弹出好旧的NullPointerExeption。
有谁知道做我所描述的方式? 从一个活动获取数据到另一个活动,但不能立即进行(或开始)该活动?
如果要传递这样的数据,最好使用共享首选项。 它使用简单,您可以在程序的任何位置使用数据。
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);
您可以随时使用其中任何一种
•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.
此链接将为您提供更多详细信息。
我可以想出两个解决问题的方法。 一个是你只是继续传递数据,这意味着在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; }
这个类不一定是线程安全的,所以要预先警告,如果你有multithreading访问采取适当的预防措施。
你可以通过两种方法来做到这一点。 1)共享偏好
SharedPreferences.Editor editor = prefs.edit(); editor.putString("key", "Value"); editor.commit();
//获取共享首选项。
String value = pref.getString("key" , "");
2)定义应用程序级别并访问相同的级别。
类包含变量的getter和setter函数。 设置一个活动并进入另一个活动。