如何在 android 中的两个 Activity 之间传递 XMPPTCPConnection 对象?
How to pass XMPPTCPConnection object between two Activities in android?
我想通过 intent.putExtra(...);
传递一个 XMPPTCPConnection 对象,但不幸的是,它无法将我的对象转换为 Serialize
或 Parcelable
,例如: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();
并使用con
到connect()
和login()
。
我想通过 intent.putExtra(...);
传递一个 XMPPTCPConnection 对象,但不幸的是,它无法将我的对象转换为 Serialize
或 Parcelable
,例如: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();
并使用con
到connect()
和login()
。