在两个活动之间传输数据[重复]

Posted

技术标签:

【中文标题】在两个活动之间传输数据[重复]【英文标题】:Transfer data between two activities [duplicate] 【发布时间】:2018-03-25 16:29:19 【问题描述】:

我正在尝试在两个不同的活动之间发送和接收数据。我在这个网站上看到了一些其他问题,但没有任何问题涉及保留第一类的状态。

例如,如果我想从 A 类发送一个整数 X 到 B 类,然后对整数 X 进行一些操作,然后将其发送回 A 类,那么该怎么做呢?

像下面的代码这么简单吗?

A类

 Intent i = new Intent(this, ActivityB.class);
 i.putExtra("Value1", 1);
 startActivity(i);

并接收来自 B 类的响应:

Bundle extras = getIntent().getExtras();
int value1 = extras.getint("Value1",0);

B 类

Bundle extras = getIntent().getExtras();
int value1 = extras.getint("Value1",0);
//Do some operations on value1 such as maybe adding or subtracting
Intent i = new Intent(this, ActivityA.class);
i.putExtra("Value1", 1);
startActivity(i);

这似乎不正确,因为我只是想切换回 Activity A 并在操作完成后从 Activity B 接收数据(也许 Activity B 中的一个按钮开始对接收到的数据进行操作,然后将其发送回 Activity一个?)

【问题讨论】:

startActivityForResulttada 【参考方案1】:

在第一个活动中:

Intent i = new Intent(this, ActivityB.class);
i.putExtra("Value1", "1");
startActivityForResult(i, 100);

接收如下数据:

Intent receivedIntent = getIntent();
if(receiveIntent!=null)
   String value1 = receiveIntent.getStringExtra("Value1");

经过一些操作在第二个活动中:

Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();

FirstActivity 中处理结果:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 

    if (requestCode == 100) 
        if(resultCode == Activity.RESULT_OK)
            String result=data.getStringExtra("result");
        
    

【讨论】:

嗨 Nilesh,第二个活动如何接收意图?抱歉,我是 android 开发的新手。 检查更新的答案。 感谢这个工作:)。 没有 'startActivityForResult()' 怎么办?你应该使用 'startActivityForResult()' 而不是 'startActivity()'.. @AGMTazim 更新【参考方案2】:

startActivityForResult()onActivityResult() 是您的解决方案。

在您的ActivityA 中。使用startActivityForResult() -

Intent i = new Intent(this, ActivityB.class);
 i.putExtra("Value1", 1);
 startActivityForResult(i, requestCodeForOperation);

在您的 ActivityB 上,获取从 ActivityA 发送的数据。喜欢 -

int value1 = getIntent().getExtras().getInt("Value1", 0); 

执行您的操作并使用setResult() 添加您的操作结果和finish()。喜欢-

Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();

当然你需要在ActivityA 上实现onActivityResult() 以从ActivityB 获取返回的数据。喜欢 -

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 

    if (requestCode == requestCodeForOperation) 
        if(resultCode == Activity.RESULT_OK)
            String result=data.getIntExtra("result", 0);
        
    

【讨论】:

以上是关于在两个活动之间传输数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用@input 和@output 在角度组件之间传输数据[重复]

在两个打开的活动之间来回移动数据

如何从片段获取数据到另一个活动? (不是容器活动)[重复]

Google BigQuery Google Ads 数据传输表中的重复数据

重复编码3次的传输效率

在视图控制器之间传输浮点值 [重复]