活动之间的适当数据传输
我对将数据传递给其他活动有几点疑问。比方说,我有三个活动,我打电话给他们活动之间的适当数据传输
第一个活动
次活动
第三个活动
当应用程序被用户启用,用户第一活动。从第一个活动到第三个活动,用户还必须完成第二个活动。工作流
第一个活动(用户按钮) - > 次活动(用户按钮) - > 第三个活动
假设我需要在第三,从第一个活动数据活动,所以我需要将我的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");
}
感谢您的回答,问候。
您可以使用放在Application
类实例中的变量。该变量为应用程序的所有活动和其他元素共享。
你有几个选择。首先,你在评论中说你只需要一个元素。在这种情况下,您可以只传递一个元素作为Intent
中的“额外”,而不是传递整个HashMap
。
其次,我不明白你为什么通过调用startActivity()
从第三个Activity
返回到第二个Activity
。你应该打电话finish()
,这将返回到第二个Activity
。
如果您需要从第三Activity
返回一些数据到第二Activity
,你应该开始第三Activity
使用startActivityForResult()
并设定数据使用setResult()
第三Activity
返回,数据将在onActivityResult()
返回到第二Activity
。
另一种方法是完全按照您所做的操作,但也可以在每次拨打startActivity()
时将hashMap
复制到Intent
中作为“额外”。如果您只有hashMap
中的条目,那么它的性能不会有明显的差异。
否,除非您存储在app pref或db中。 –
@SouravGanguly我有mysql数据库,所以我应该添加asynctask类 到我想要获取一些数据并使用asynctask从数据库下载这些数据以显示是否需要一些数据的每个活动? –
使用由greenrobot创建的EventBus库 –