如何使用字符串或整数以外的数据类型启动Intent?

时间:2015-02-21 23:32:11

标签: java android android-intent

我有一个应用程序,我通过Sphero Android SDK控制Sphero,在我的MainActivity中,我让用户连接Sphero并且Sphero挂钩到变量mRobot。我想在MainActivity中创建一个Intent:

Intent calibrationIntent = new Intent(MainActivity.this, CalibrationActivity.class);
calibrationIntent.putExtra("Robot", mRobot);   
startActivity(calibrationIntent);

在这里,我将mRobot变量放在putExtra()的{​​{1}}中,我试图获取额外的变量,但我不能:

CalibrationActivity.class

我在行Intent calibrationIntent = getIntent(); Bundle bundle = getIntent().getExtras(); Sphero mRobot = bundle.getString("Robot"); 中收到错误,因为我试图将Robot数据类型转换为字符串。

我如何通过意图传递Sphero mRobot = bundle.getString("Robot");变量,以便我可以在其他活动中修改它?我尝试使用mRobot在我的MainActivity中转换为字符串,但我不知道如何将其转换回mRobot.toString();中的robot

编辑:

我尝试在calibrationActivitygetParcelable()中使用getSerializable()MainActivity,我通过

将字符串转换为Sphero
CalibrationActivity

Sphero mRobot = (Sphero) bundle.getParcelable("Robot"); 

但是,在连接Sphero后按下按钮,应用程序崩溃,日志为Sphero mRobot = (Sphero) bundle.getSerializable("Robot");

3 个答案:

答案 0 :(得分:1)

好吧,我想我没有仔细阅读你的问题。

  

我在行Sphero mRobot = bundle.getString("Robot");中收到错误,因为我正在尝试将Robot数据类型转换为字符串。

我没有注意到您说它是Robot数据类型,我只是将您mRobot的声明视为Sphero。现在看看你的错误信息:

  

java.lang.ClassCastException:orbotix.robot.base.Robot无法强制转换为orbotix.sphero.Sphero

问题是mRobot不是Sphero。这是Robot。具体来说,它是orbotix.robot.base.Robot

更改为:

Robot mRobot = (Robot) bundle.getParcelable("Robot");

假设你有

import orbotix.robot.base.Robot

我不熟悉Sphero SDK的类型系统,所以我不知道SpheroRobot在类型层次结构中是如何相关的,但错误信息告诉您:您序列化了Robot,并尝试将其反序列化为Sphero

答案 1 :(得分:0)

Sphero是否可序列化,您始终可以使用共享单例来在活动之间传递数据。这不仅限于任何特定类型的数据。一个简单的实现将是这样的:

public class DataHolder {
  private Sphero mRobot;
  public Sphero getData() {return mRobot;}
  public void setData(String mRobot) {this.mRobot = mRobot;}

  private static final DataHolder holder = new DataHolder();
  public static DataHolder getInstance() {return holder;}
}

然后在您的调用方法中,执行以下操作:

Intent calibrationIntent = new Intent(MainActivity.this, CalibrationActivity.class);
DataHolder.getInstance().setData(mRobot);
startActivity(calibrationIntent);

然后在您的CalibrationActivity中,您始终可以通过以下方式获取mRobot对象:

Sphero myRobot = DataHolder.getInstance().getData();

答案 2 :(得分:0)

您正在尝试将对象强制转换为String。 Sphero是一个对象。你必须将它作为一个可以包含的附加物传递。

 Sphero mRobot = (Sphero) bundle.getExtra("Robot");