2013-02-14 108 views
0

我的项目中有两个活动类,第三个类是Thread的子类。在活动之间发送对象

Thread类执行Bluetooth Socket这不是Parcelable

First Activity启动Second Activity使用startActivityforResult()

Second Activity创建Thread类的一个对象,并启动该线程。

我需要将线程对象的对象引用从Second Activity传递到First Activity's onActivityResult(),以便我可以从第一个活动访问Thread对象。

我该如何做到这一点?

+0

人们应该不停地在活动中思考。他们是用户界面,你也可以在其他地方工作。 – 2013-02-14 16:06:40

+1

你为什么要这么做?在活动之间传递数据是使用序列化完成的,因此您可以让您的Thread子类实现Serializable或Parcelable,并使用返回意图将其传回。 – 2013-02-14 16:06:57

+0

您只能在活动之间传递基本类型(旁边的Parcelable),为什么不在onActivityResult()之后的第一个Activity中启动您的Thread? – 2013-02-14 16:08:00

回答

2

您有几种选择。

您可以您的对象分解成简单的数据类型,并把这些值作为您传递回来setResult()意图群众演员,不这么做的话,会使用intent.putExtra(key, value)

或者你可以让你的数据对象实现Parcelable接口,以便您可以将数据对象直接添加到意图。

的代码做后者会是这个样子

Intent resultIntent = new Intent(); 
resultIntent.putExtra("resultObject", mObj); 
setResult(ACTION_OK, resultIntent); 

然后里面你的onActivityResult可以拉出来是这样的:

data.getParcelableExtra("resultObject"); 

对于后者的方法来工作,你需要正确地使用你的数据对象实现parcelable。然而,前一种方法并不要求这样做,因为只会传回简单的值。然后,您必须采取这些简单的值,并在另一侧“重新膨胀”数据对象。

+0

我想要包裹的对象包含蓝牙socket既不可兼容也不可串行化。你认为我能做什么? – tez 2013-02-15 06:35:26

+1

然后你不应该试图在两个这样的活动之间传递它。可能有更好的方法来完成你需要做的事情。也许扩展Application类并让它存储你的套接字,或者使用一个你可以绑定到两个活动的服务。或者,也许将第二项活动变成第一项活动的“另一个屏幕”,而不是完全独立的活动。 – FoamyGuy 2013-02-15 14:23:11