我试图解析一个对象,从我的主活动到一个新的活动,当用户单击一个按钮时开始。我搜索了互联网,找到了如何解析基元类型和实现parceble或serilizable的自定义类,但找不到任何关于如何传输原始对象的信息。
我将在下面编写我想要实现的伪代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
loadConnectInfo();
View connectButton = findViewById(R.id.connectButton);
connectButton.setOnClickListener(this);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.connectButton:
Intent i = new Intent(this, NewClass.class);
Socket s = connect(); // this is the object I want to parse to to "NewClass"
startActivity( i);
break;
}
您不能以这种方式在活动之间传递既不可序列化也不可打包的对象。在这种情况下,您可能想要做的是将管理和与套接字交互的代码转换为服务,并在需要使用它的所有活动中绑定到该服务。
有时,当我必须将变量从一个类传递到另一个类时,我在类中使用静态变量来传递一些对象。这将工作,但它是不推荐在Android中传递对象的方式,你不能保证它总是工作。在这里,您应该检查您的交付对象是否为null。
public void onClick(View v) {
switch (v.getId()) {
case R.id.connectButton:
Intent i = new Intent(this, NewClass.class);
Socket s = connect(); // this is the object I want to parse to to "NewClass"
//Here using static field of class you pass variable to NewClass
//You can access this value in NewClass like that: NewClass.StaticSocket
//Warning: This is not a standar android scheme but I tested and it works
//with Date object
NewClass.StaticSocket = s;
startActivity( i);
break;
}
第二次活动:
public void onCreate(Bundle savedInstanceState) {
Log.i("StaticVar","NewClass.StaticSocket: "+ NewClass.StaticSocket.toString());
已经有其他关于这个的帖子了:
在活动之间共享数据的最佳方式是什么?
顺便说一句,要小心:像套接字这样的对象不应该通过intent被bundle共享,因为它们不应该被序列化。也许可以使用全局状态,比如单例,