活动之间的适当数据传输

活动之间的适当数据传输

问题描述:

我对将数据传递给其他活动有几点疑问。比方说,我有三个活动,我打电话给他们活动之间的适当数据传输

第一个活动

次活动

第三个活动

当应用程序被用户启用,用户第一活动。从第一个活动到第三个活动,用户还必须完成第二个活动。工作流

第一个活动(用户按钮) - > 次活动(用户按钮) - > 第三个活动

假设我需要在第三,从第一个活动数据活动,所以我需要将我的HashMap与我的数据从第一个活动传递到第二个活动,然后传递到第三个活动?是否有任何方法将数据直接从第一个活动传递到第三个活动,但正如我所说的,用户必须去也通过第二次活动。

我那样做这个...

Intent secondActivity = new Intent(this, secondActivity.class); 
secondActivity.putExtra("myHashMap", dataHashMap); 
this.startActivity(secondActivity); 

然后在第二个活动我有这部分代码

secondActivity = getIntent(); 
    dataHashMap = (HashMap<String, 
    String>)secondActivity.getSerializableExtra("myHashMap"); 

,然后我不停地重复这上面两个步骤为第三个活动。这是正确的方法吗?因为看起来有点混乱和耗时。还有另一个问题,现在如果我在第三个活动中,并且想回到第二个或第一个活动,我总是传递一些HashMap,因为活动期望这种类型的数据。是否有办法有时返回到前一个活动,但不再传递任何数据(在我的情况下是HashMap)如果不需要?

secondActivity.putExtra("myHashMap", dataHashMap); //- I would like to sometimes skip this step 

我想下面这段代码与此处理,但它不工作,我的应用程序保持停止/崩溃,因为第二个活动从第三个活动预计HashMap的数据。

secondActivity = getIntent(); 
if(secondActivity != null){ 
    dataHashMap = (HashMap<String, 
    String>)secondActivity.getSerializableExtra("myHashMap"); 
} 

感谢您的回答,问候。

+0

否,除非您存储在app pref或db中。 –

+0

@SouravGanguly我有mysql数据库,所以我应该添加asynctask类 到我想要获取一些数据并使用asynctask从数据库下载这些数据以显示是否需要一些数据的每个活动? –

+0

使用由greenrobot创建的EventBus库 –

您可以使用放在Application类实例中的变量。该变量为应用程序的所有活动和其他元素共享。

你有几个选择。首先,你在评论中说你只需要一个元素。在这种情况下,您可以只传递一个元素作为Intent中的“额外”,而不是传递整个HashMap

其次,我不明白你为什么通过调用startActivity()从第三个Activity返回到第二个Activity。你应该打电话finish(),这将返回到第二个Activity

如果您需要从第三Activity返回一些数据到第二Activity,你应该开始第三Activity使用startActivityForResult()并设定数据使用setResult()第三Activity返回,数据将在onActivityResult()返回到第二Activity

另一种方法是完全按照您所做的操作,但也可以在每次拨打startActivity()时将hashMap复制到Intent中作为“额外”。如果您只有hashMap中的条目,那么它的性能不会有明显的差异。