在活动之间转移对象

时间:2011-11-16 19:15:05

标签: android parsing android-activity

我试图将我的主要活动中的对象解析为用户单击按钮时启动的新活动。我已经上网了,并找到了如何解析原始类型和定制类来实现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;
    }

3 个答案:

答案 0 :(得分:1)

您不能以这种方式传递活动之间既不可序列化也不可分区的对象。在这种情况下,您可能想要做的是将管理套接字并与套接字交互的代码转换为服务,并在需要使用它的所有活动中绑定到该服务。

答案 1 :(得分:1)

有时当我必须将变量从一个类传递到另一个类时,我在类中使用了静态变量,我提供了一些对象。这将有效,但不推荐在Android中传递对象的方式,并且您没有始终有效的保证。。在这里,您应该检查您的交付对象当然是否为空。

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());

答案 2 :(得分:0)

关于此事已有其他帖子:

What's the best way to share data between activities?

顺便说一下,要小心:套接字之类的对象并不意味着捆绑通过意图共享,因为它们不应该被序列化。也许使用全局状态,就像单身人士一样为你服务。