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

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


这是我的第二个活动:

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" />


然后,您可以从任何需要的活动中呼叫((MyApplication)getApplication()).initializeXMPPTCPConnection();((MyApplication)getApplication()).getXMPPTCPConnection();

10-07 19:32
查看更多