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

时间:2015-12-27 15:25:47

标签: android android-activity xmpp smack

我想传递一个带有intent.putExtra(...);的XMPPTCPConnection对象,但不幸的是,它不能将我的对象转换为SerializeParcelable,如:signInIntent.putExtra("connection", (Serialize) conn);并报告错误:"无法将XMPPTCPConnection投射到SerializeParcelable。" 我看到很多类似的问题,并尝试做他们的答案。 所以我试图将对象添加到列表,然后传递该列表。 这是我的第一个活动:

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
我在这段代码中错了吗? 有没有其他方式在活动之间传递数据? 请帮我。谢谢。

2 个答案:

答案 0 :(得分:4)

我建议您将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();

答案 1 :(得分:0)

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

public XMPPTCPConnection initializeXMPPTCPConnection(){}

并在方法的最后 return connection;

当你需要打电话时,就像这样 XMPPTCPConnection con = ((MyApplication)getApplication()).initializeXMPPTCPConnection();

并使用conconnect()login()