如何在 android 中的两个 Activity 之间传递 XMPPTCPConnection 对象?

How to pass XMPPTCPConnection object between two Activities in android?

我想通过 intent.putExtra(...); 传递一个 XMPPTCPConnection 对象,但不幸的是,它无法将我的对象转换为 SerializeParcelable,例如:signInIntent.putExtra("connection", (Serialize) conn); 并报告错误:"can not cast XMPPTCPConnection to Serialize or Parcelable." 我看到许多类似的问题并尝试喜欢他们的答案。 所以我试图将对象添加到列表中,然后传递该列表。 这是我的第一个 Activity :

Intent signInIntent = new Intent(LoginActivity.this, MainActivity.class);
ArrayList<XMPPTCPConnection> conn = new ArrayList<XMPPTCPConnection>();
conn.add(connection);
signInIntent.putExtra("connection",  conn);
startActivity(signInIntent);

这是我的第二个 Activity :

Bundle getData = getIntent().getExtras(); 
List<XMPPTCPConnection> listConn = new ArrayList<>();
listConn = (List<XMPPTCPConnection>) getData.get("connection");
XMPPTCPConnection connection = listConn.get(0);

但是报告了这个错误:

12-27 18:48:42.919 30358-30358/finalproject.ffisher.com.finalproject E/AndroidRuntime: FATAL EXCEPTION: main
12-27 18:48:42.919 30358-30358/finalproject.ffisher.com.finalproject E/AndroidRuntime: Process: finalproject.ffisher.com.finalproject, PID: 30358
12-27 18:48:42.919 30358-30358/finalproject.ffisher.com.finalproject E/AndroidRuntime: java.lang.RuntimeException: Parcel: unable to marshal value org.jivesoftware.smack.tcp.XMPPTCPConnection@3f8f8920

这段代码我错了吗? 还有其他方法可以在活动之间传递数据吗? 请帮我。谢谢。

我建议将您的 XMPPTCPConnection 对象保留在 Application 的扩展中,因为它可以从应用程序中的任何位置访问。

public class MyApplication extends Application {

    private XMPPTCPConnection connection;

    @Override
    public void onCreate() {
        super.onCreate();
    }

    public void initializeXMPPTCPConnection() {
        XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
            .setServiceName(SERVER_HOST)
            .setHost(SERVER_ADDRESS)
            .setPort(PORT)
            .setCompressionEnabled(false)
            .setResource("test")
            .setDebuggerEnabled(true)
            .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
            .build();
        connection = new XMPPTCPConnection(config);
    }

    public XMPPTCPConnection getXMPPTCPConnection() {
        return connection;
    }
}

并在 AndroidManifest 中添加对它的引用:

<application
    android:name=".MyApplication" />

然后你可以从任何你想要的 activity 调用 ((MyApplication)getApplication()).initializeXMPPTCPConnection();((MyApplication)getApplication()).getXMPPTCPConnection();

除了上面的答案,我也有同样的问题,确实有一个空异常错误。不要使用第二种方法并更改第一种方法。而不是 void 使用

public XMPPTCPConnection initializeXMPPTCPConnection(){}

并在方法的最后 return connection;

当你需要调用它的时候,就像这样 XMPPTCPConnection con = ((MyApplication)getApplication()).initializeXMPPTCPConnection();

并使用conconnect()login()