是否可以将Object.ToString()创建的字符串转换回原始对象,即:
public boolean dispatchKeyEvent (KeyEvent event) {
appendLog(event.toString());
return super.dispatchKeyEvent(event);
}
appent log会将每个keyevent记录为新行中的字符串。记录后,我想运行已记录的keyevents
是否可以将字符串记录的键事件转换为KeyEvent对象?
答案 0 :(得分:3)
仅当toString()
包含所有必要的事件信息时。如果它只是一个哈希码,当然不是。如果相关信息可用,则需要解析它,并使用其中一个KeyEvent
构造函数,并希望内部没有任何内容未反映在toString
中。对我来说似乎很粗略。
如果你需要存储它,那就是Parcelable
,这可能会有帮助。
在您显示的代码段中仍然有活动,没有实际的用例,很难知道您要做什么。
答案 1 :(得分:3)
一般来说,没有。 String将不包含足以重建原始对象的信息。当然,如果做在toString()返回的String中编码足够的信息,您可以重新构建对象 - 例如,您可以将对象序列化为XML - String,并从该XML序列化重建发起它的对象。看看JAXB。
答案 2 :(得分:2)
是的,它可能但可能不是你想的那样。为了做到这一点,所有与KeyEvent相关的数据都必须转换为文本形式,然后进行解析并创建一个新的KeyEvent。另一个问题是KeyEvent缺少setter来重新创建内部状态,所以要完成返回转换,你必须创建一个子类或找到一种方法来使用Parcelable转换解析后的字符串。
答案 3 :(得分:2)
如果您想要重播键盘和鼠标事件,那么您应该看看:
http://docs.oracle.com/javase/6/docs/api/java/awt/Robot.html
您需要倾听所有事件并记录所有需要的信息,但您需要的一切都应该在事件中。
答案 4 :(得分:1)
event.toString()返回事件对象的字符串表示形式(实际上将返回与引用相关的字符串)。
您不能使用强制转换来重新创建KeyEvent对象。
答案 5 :(得分:0)
我怀疑toString()包含对象的所有信息。您需要序列化机制来恢复对象。在Android中,我会使用JSONObject。