我想通过intent.putExtra(...);
传递XMPPTCPConnection对象,但不幸的是,它不适用于将对象转换为Serialize
或Parcelable
的情况,例如: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();