Java 如何在AndroidStudio上传输多个活动的数据?
我是Android和java新手,我正在尝试开发一个需要多种活动的应用程序 第一个活动是主菜单,第二个是报警,第三个是设置 问题是我想从第一个活动开始第二个活动,但我想检查密码以停止第三个活动的警报 我检查了很多教程,似乎我需要将第三个活动中的数据发送到第二个,但是当我在第一个活动中创建第二个活动时,我不知道如何让“意图”对象发送数据,如果我创建另一个具有相同引用的活动,它将崩溃 我试图将第二个意愿从第一个活动发送到第三个活动,但我不知道如何接收它,因为它既不是字符串,也不是字符串。。。我不能做“bundle.getString” 正如你可能看到的,我有点困惑,这可能比我想的要容易。我会感谢你的回答 第一项活动(主要活动): 第二项活动(报警A) 第三项活动(Opciones)Java 如何在AndroidStudio上传输多个活动的数据?,java,android,android-intent,android-activity,android-studio-2.2,Java,Android,Android Intent,Android Activity,Android Studio 2.2,我是Android和java新手,我正在尝试开发一个需要多种活动的应用程序 第一个活动是主菜单,第二个是报警,第三个是设置 问题是我想从第一个活动开始第二个活动,但我想检查密码以停止第三个活动的警报 我检查了很多教程,似乎我需要将第三个活动中的数据发送到第二个,但是当我在第一个活动中创建第二个活动时,我不知道如何让“意图”对象发送数据,如果我创建另一个具有相同引用的活动,它将崩溃 我试图将第二个意愿从第一个活动发送到第三个活动,但我不知道如何接收它,因为它既不是字符串,也不是字符串。。。我不能做
根据您需要共享的数据,您可以在活动之间发送捆绑包,使用共享首选项,或者使用所有应用程序之间共享的数据实现您自己的singleton类。 当我需要为不同的活动在应用程序的任何位置共享需要知道的数据时,我更喜欢这样的单例:
public class AppData {
private static AppData ourInstance = new AppData ();
private String deviceId = null; // Device
private String coupon = null; // Coupon used to chack a valid event
public static AppData getInstance () {
return ourInstance;
}
}
Intent intent = new Intent(context, SingleFragmentHostActivity.class);
Bundle extras = new Bundle();
extras.putString("key_title", "Title");
extras.putSerializable("pojo", new Car()); // Car class must implemente Serializable
intent.putExtras(extras);
startActivity(intent);
public final static int REQUEST_CODE = 0001; // integer of your choice
startActivityForResult(intent, REQUEST_CODE);
用起来像:
AppData.getInstance().deviceId = "sample device Id";
如果需要以离散方式将信息从一个实例发送到另一个实例:
希望有帮助。你可以这样做。在Opciones活动中,声明一个静态字符串变量。将EditText数据存储到字符串中,您可以引用第二个活动中的字符串 第三项活动
public static String claveCorrecta = "";
claveCorrecta = et2.getText.toString();
现在在第二个活动中,您可以通过
Opciones.claveCorrecta
您可以向其他活动发送基本类型以及
POJO
对象。要发送任何POJO
,必须实现Serializable
或Parcellable
例如,要向第二个活动发送数据,请执行以下操作:
public class AppData {
private static AppData ourInstance = new AppData ();
private String deviceId = null; // Device
private String coupon = null; // Coupon used to chack a valid event
public static AppData getInstance () {
return ourInstance;
}
}
Intent intent = new Intent(context, SingleFragmentHostActivity.class);
Bundle extras = new Bundle();
extras.putString("key_title", "Title");
extras.putSerializable("pojo", new Car()); // Car class must implemente Serializable
intent.putExtras(extras);
startActivity(intent);
public final static int REQUEST_CODE = 0001; // integer of your choice
startActivityForResult(intent, REQUEST_CODE);
如果您想从第二个活动中收到一些数据,您必须使用startactivityforresult
而不是startActivity
,如下所示:
public class AppData {
private static AppData ourInstance = new AppData ();
private String deviceId = null; // Device
private String coupon = null; // Coupon used to chack a valid event
public static AppData getInstance () {
return ourInstance;
}
}
Intent intent = new Intent(context, SingleFragmentHostActivity.class);
Bundle extras = new Bundle();
extras.putString("key_title", "Title");
extras.putSerializable("pojo", new Car()); // Car class must implemente Serializable
intent.putExtras(extras);
startActivity(intent);
public final static int REQUEST_CODE = 0001; // integer of your choice
startActivityForResult(intent, REQUEST_CODE);
然后,您必须重写调用startActivityForResult
的活动中的onActivityResult
方法。大概是这样的:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == REQUEST_CODE) {
if(resultCode == RESULT_OK) {
if(data != null && data.getExtras() != null) {
data.getExtras().getBoolean("key_is_success", false)
}
} else if(resultCoee == RESULT_CANEL){
// Your logic in case user cancelled the operation or something.
}
}
}
Intent intent = new Intent();
intent.putExtra("key_is_success", true);
setResult(RESULT_OK, intent);
finish();
例如,在第二个活动中,您希望将布尔值发送回第一个活动。您可以这样做:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == REQUEST_CODE) {
if(resultCode == RESULT_OK) {
if(data != null && data.getExtras() != null) {
data.getExtras().getBoolean("key_is_success", false)
}
} else if(resultCoee == RESULT_CANEL){
// Your logic in case user cancelled the operation or something.
}
}
}
Intent intent = new Intent();
intent.putExtra("key_is_success", true);
setResult(RESULT_OK, intent);
finish();
如果您想将一些数据从第三个活动发送回第二个活动,并且第二个活动会将其发送回第一个活动,则同样的逻辑也适用
从第二个活动启动第三个活动时,也可以使用Intent.FLAG\u ACTIVITY\u FORWARD\u RESULT
。根据文件:
如果已设置,并且正在使用此意图从现有活动启动新活动,则现有活动的回复目标将转移到新活动。这样,新活动可以调用setResult(int),并将结果发送回原始活动的应答目标
有关更多详细信息,请阅读此链接:
我希望它能帮助你。干杯