我有一个应用程序,我通过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
。
编辑:
我尝试在calibrationActivity
和getParcelable()
中使用getSerializable()
和MainActivity
,我通过
CalibrationActivity
或
Sphero mRobot = (Sphero) bundle.getParcelable("Robot");
但是,在连接Sphero后按下按钮,应用程序崩溃,日志为Sphero mRobot = (Sphero) bundle.getSerializable("Robot");
答案 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的类型系统,所以我不知道Sphero
和Robot
在类型层次结构中是如何相关的,但错误信息告诉您:您序列化了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");