在三个活动中发送数据

时间:2018-03-22 08:33:45

标签: java android android-activity

我有3个活动,连接方式如下: A - > B - > C.

在A上输入将在C中使用的文本,然后打开B并输入要在C中使用的另一个文本。但是当C打开时,会产生空错误。

我想出了一个解决方案,然后启动A然后直接转到C和onCreate of C,启动B,好像是从A到B。

有更好的解决方案吗?我的解决方案是否合适还是会导致更多问题而不是修复?谢谢你的帮助。

4 个答案:

答案 0 :(得分:2)

有几个选项 - Intent附加内容,SharedPreferencesSQLite数据库,内部/外部存储,Application类,静态数据类等。

对于您已解释的情况,我建议使用SharedPreferences来存储数据,这是相对简单的方法,您可以随时从任何Activity或类访问存储的数据,这是一个简单的用法导:

将数据输入SharedPreferences:

SharedPreferences.Editor editor = getSharedPreferences("YourPrefsFile", MODE_PRIVATE).edit();
 editor.putString("name", "Elena");
 editor.putInt("idName", 12);
 editor.apply();

从SharedPreferences获取数据:

SharedPreferences prefs = getSharedPreferences("YourPrefsFile", MODE_PRIVATE); 
String restoredText = prefs.getString("text", null);
if (restoredText != null) {
  String name = prefs.getString("name", "");
  int idName = prefs.getInt("idName", 0);
}

答案 1 :(得分:1)

在这种情况下你有4个解决方案

  1. 第一个是你提到的
  2. 第二个是在你将从
  3. 开始的每项活动中使用一个额外的意图
  4. 第三个解决方案是使用静态变量,以便在重新打开活动时不会影响变量(不推荐)
  5. 第四个你可以使用共享偏好来保存数据(在我看来这将是最好的解决方案)

答案 2 :(得分:0)

这不是一个好主意,因为它们可能会延迟启动活动,因为您将在活动B和C的onCreate方法中执行其他操作。由于显示延迟,将来会导致性能问题活动。

你可以做的事情......

  • 如果数据非常小,可以说一个键值对,那么为什么不使用共享首选项。
  • 或者使用数据库在创建数据时存储数据,之后创建活动时查询并显示数据。

答案 3 :(得分:0)

我认为,您可以通过意图将输入传递给下一个活动。

因为它是文本输入,

intent.putExtra("A_Activity_Input","YourinputString"); //in activity A

然后活动B开始,使用

获取字符串
String Input_A_Activity=getIntent().getStringExtra("A_Activity_Input");

之后从B开始C活动时,使用意图发送两个数据

intent.putExtra("A_Activity_Input",Input_A_Activity);
intent.putExtra("B_Activity_Input","YourinputString");

在活动C中,从意图中获取字符串。

由于您只需要处理数据,将其存储在SQL或SharedPref或其他内容中会浪费内存