在活动之间转移对象



我试图解析一个对象,从我的主活动到一个新的活动,当用户单击一个按钮时开始。我搜索了互联网,找到了如何解析基元类型和实现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共享,因为它们不应该被序列化。也许可以使用全局状态,比如单例,

最新更新