使用意图在活动之间传输数据

22

我想要能够在一个Activity和另一个Activity之间传输数据。这应该如何实现呢?


你已经尝试了哪些代码?有什么问题出现了吗? - dave.c
我猜你不是想传输ZIP文件。看看这里:http://stackoverflow.com/questions/4872856/data-transfer-from-one-activity-to-another-activity-on-button-click-event - Vikas Patidar
8个回答

31

通过下面的代码,我们可以在不同活动之间传递数值。

在父活动中使用以下代码:

Intent myintent=new Intent(Info.this, GraphDiag.class).putExtra("<StringName>", value);
startActivity(myintent);

在子活动中使用下面的代码

String s= getIntent().getStringExtra(<StringName>);

为了澄清像我这样的新手,将String s= getIntent().getStringExtra("StringName");放入子活动中是有效的。 - CHarris
它只适用于字符串类型吗? - rainman

14

有几种方法可以访问其他类或活动中的变量或对象。

A. 数据库

B. 共享偏好设置。

C. 对象序列化。

D. 可以命名为Common Utilities的保存公共数据的类,这取决于您。

E. 通过Intents和Parcelable接口传递数据。

它取决于您的项目需求。

A. 数据库

SQLite是嵌入到Android中的开源数据库。 SQLite支持标准的关系型数据库功能,如SQL语法、事务和预处理语句。

教程-- http://www.vogella.com/articles/AndroidSQLite/article.html

B. 共享偏好设置

假设您想要存储用户名。那么现在将有两个东西,一个Key用户名,Value值。

如何存储

 // Create object of SharedPreferences.
 SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
 //now get Editor
 SharedPreferences.Editor editor = sharedPref.edit();
 //put your value
 editor.putString("userName", "stackoverlow");

 //commits your edits
 editor.commit();

使用putString()、putBoolean()、putInt()、putFloat()、putLong() 可以保存所需的数据类型。
如何获取?
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String userName = sharedPref.getString("userName", "Not Available");

http://developer.android.com/reference/android/content/SharedPreferences.html

C. 对象序列化

如果我们想要保存一个对象的状态以便于在网络中传输,或者您也可以将其用于自己的目的,那么就需要使用对象序列化。

使用JavaBeans并将其存储为其中一个字段,然后使用getter和setter方法进行访问。

JavaBeans是具有属性的Java类。将属性视为私有实例变量。由于它们是私有的,所以从其类外部访问它们的唯一方式是通过类中的方法。更改属性值的方法称为setter方法,检索属性值的方法称为getter方法。

public class VariableStorage implements Serializable  {

    private String inString ;

    public String getInString() {
        return inString;
    }

    public void setInString(String inString) {
        this.inString = inString;
    }


}

通过使用在您的邮件方法中设置变量

VariableStorage variableStorage = new VariableStorage();
variableStorage.setInString(inString);

请使用对象序列化将此对象序列化,然后在您的其他类中反序列化此对象。在序列化中,一个对象可以被表示为一系列字节,其中包括对象数据以及有关对象类型和存储在对象中的数据类型的信息。将序列化后的对象写入文件后,可以从文件中读取并进行反序列化,即可以使用表示对象及其数据的类型信息和字节来在内存中重新创建对象。如果您需要此方面的教程,请参考此链接。

http://javawithswaranga.blogspot.in/2011/08/serialization-in-java.html

在其他类中获取变量

D. CommonUtilities

您可以自己创建一个类,其中包含您在项目中经常需要的公共数据。

示例

public class CommonUtilities {

    public static String className = "CommonUtilities";

}

E. 通过意图传递数据

请参考本教程以了解通过意图传递数据的选项。

http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/


另一种方法是使用单例类,该类可以在整个应用程序中访问。 - Ajith M A
谢谢你,真的帮了我很大的忙。我有一个整数值,想在不同的活动之间共享它。在我的当前代码中,我从活动A发送数据到活动B,然后从活动B发送到片段B。如果Frag B中的数据发生变化,我通过接口将更改传递给活动B。然后当活动B完成时,我将数据发送回活动A,但这还没有完成,我还有一些无法解决的错误! 使用CommonUtilities类是解决我的问题的更好方法。我一定会转换到它。 - Alireza Ahmadi

10

当你需要从一个活动传递数据到另一个活动时,请按照以下步骤执行:

在父活动中:

startActivity(new Intent(presentActivity.this, NextActivity.class).putExtra("KEY_StringName",ValueData)); 

或者像下面在父活动中显示的那样

Intent intent  = new Intent(presentActivity.this,NextActivity.class);     
intent.putExtra("KEY_StringName", name);   
intent.putExtra("KEY_StringName1", name1);   
startActivity(intent);

在子活动中,按照下面所示执行:
TextView tv = ((TextView)findViewById(R.id.textViewID))
tv.setText(getIntent().getStringExtra("KEY_StringName"));

或者像以下在子活动中所示的那样操作。
TextView tv = ((TextView)findViewById(R.id.textViewID));
TextView tv1 = ((TextView)findViewById(R.id.textViewID1))

/* Get values from Intent */
Intent intent = getIntent();         
String name  = intent.getStringExtra("KEY_StringName");
String name1  = intent.getStringExtra("KEY_StringName1");

tv.setText(name);
tv.setText(name1);

1
在Android中将数据从一个活动传递到另一个活动
Intent intent = new Intent(context, YourActivityClass.class);
intent.putExtra(KEY, <your value here>);

startActivity(intent);

从Android活动中检索bundle数据

Intent intent = getIntent();
  if (intent!=null) {
  String stringData= intent.getStringExtra(KEY);
  int numberData = intent.getIntExtra(KEY, defaultValue);
  boolean booleanData = intent.getBooleanExtra(KEY, defaultValue);
  char charData = intent.getCharExtra(KEY, defaultValue);   }

0

这是最好的方法:

通过下面的代码,我们可以在活动之间发送值

在父活动(父类/值发送类)中使用以下代码

Intent myintent=new Intent(<PARENTCLASSNAMEHERE>.this,<TARGETCLASSNAMEHERE>.class).putExtra("<StringName>", value);
startActivity(myintent);

在子活动(目标类/活动)中使用以下代码

String s= getIntent().getStringExtra(<StringName>);

请注意,这里的"StringName"是目标/子活动捕获的名称,而"value"是变量名,与父类/目标/发送类中的名称相同。

0

你的目的

假设你想从活动 A 跳转到活动 B

所以我们使用 Intent 来切换活动。

Activity Switch

典型的代码看起来像这样 -

在活动A中[A.class]

//// Create a New Intent object
Intent i = new Intent(getApplicationContext(), B.class);

/// add what you want to pass from activity A to Activity B
i.putExtra("key", "value");

/// start the intent
startActivity(i);

在活动 B [B.class] 中

子活动获取数据

Intent i = getIntent();

if (i!=null) {
   String stringData= i.getStringExtra("key");
}

0

1
虽然这理论上可以回答问题,但最好在此处包含答案的基本部分,并提供参考链接。 - Jason Sturges

0

在调用您的意图时,您只需发送额外的内容

像这样:

Intent intent = new Intent(getApplicationContext(), SecondActivity.class); intent.putExtra("变量名称", "要传递的值"); startActivity(intent);

现在,在您的SecondActivity的OnCreate方法中,您可以像这样获取额外的内容

如果您发送的值是“long”类型

long value = getIntent().getLongExtra("作为额外发送的变量名称", defaultValue(您可以随便给它一个值));

如果您发送的值是“String”类型

String value = getIntent().getStringExtra("作为额外发送的变量名称");

如果您发送的值是“Boolean”类型

Boolean value = getIntent().getStringExtra("作为额外发送的变量名称", defaultValue);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接