Java 如何正确打包列表<;哈希表<;字符串,列表<;字符串>&燃气轮机&燃气轮机;为了广播?
在Android上,我尝试使用自定义的意图和广播侦听器发送自定义广播消息。我有一些自定义数据,格式如下:Java 如何正确打包列表<;哈希表<;字符串,列表<;字符串>&燃气轮机&燃气轮机;为了广播?,java,android,android-intent,broadcastreceiver,Java,Android,Android Intent,Broadcastreceiver,在Android上,我尝试使用自定义的意图和广播侦听器发送自定义广播消息。我有一些自定义数据,格式如下: List<Hashtable<String,List<String>>> data; 我得到一个错误: The method putExtra(String, boolean) in the type Intent is not applicable for the arguments (String, List<Hashtable<Str
List<Hashtable<String,List<String>>> data;
我得到一个错误:
The method putExtra(String, boolean) in the type Intent is not applicable for the arguments (String, List<Hashtable<String,List<String>>>)
但是,我不知道如何将我的数据转换成捆绑包来使用它。这样做对吗?还是有一种更简单的方法?您想为
putExtra(字符串名称,可序列化的s)
版本设置可序列化的。但是,List
是一个不扩展Serializable
的接口。尝试将其声明为ArrayList
我曾经遇到过一些问题。我以一种丑陋的方式解决了它,我想,你可以把它作为参考
我将Map
放入一个全局单例对象中,Map
的键是String
,Map
将保留我要传递到Intent
的对象,而不是将对象放入Intent
,我将String
键放入Intent
。在意图传递到的活动(或服务…)中,我从intent
获取密钥,然后从Mao
获取我真正关心的对象
也许这还不够清楚,下面是伪代码:
public void sendIntent() {
Object data; // the object you want to pass through Intent
Map<String, Object> globalMap = getMyGlobalMap();
String uid = UUID.randomUUID().toString();
globalMap.put(uid, data);
intent.putExtra(EXTRA_OBJECT_UID, uid);
}
public void receiveIntent() {
String uid = intent.getStringExtra(EXTRA_OBJECT_UID);
Object data = getMyGlobalMap().get(uid); // Here is your data object.
}
public void sendIntent(){
对象数据;//要通过的对象
Map globalMap=getMyGlobalMap();
字符串uid=UUID.randomUUID().toString();
全局映射put(uid,数据);
intent.putExtra(额外对象UID,UID);
}
公共无效接收意图(){
stringuid=intent.getStringExtra(EXTRA\u OBJECT\u uid);
对象数据=getMyGlobalMap().get(uid);//这是您的数据对象。
}
请注意,由于您将全局映射放在一个单例对象中,因此在处理完该对象后,您可能希望从映射中删除该对象,因为只要应用程序存在,映射就会一直存在,因此您可能不想保留一些无用的对象,让它们占用您宝贵的内存
更新
另一件非常重要的事情是,发送意图的组件和接收意图的组件必须在同一进程中,只有同一进程中的类才能共享堆中的数据。OMG。。。跑列表..:-如果你这样做了,上帝,就不要发送广播。这到底有什么意义?只有同一进程的人才能利用广播;只要有一个本地对象,您就可以对其进行回调。@hackbod正如我在回答中提到的,我认为这不是通过Intent传递复杂对象的好方法。但是如果你只想在你的应用程序中传递这个对象,并且使你的对象可分配(如<代码>列表< /代码>)是非常复杂的,那么我想你可能想考虑这个解决方案。这就是我所同意的。如果只想在应用程序中传递对象,请不要使用广播。广播用于在应用程序之间发送意图。如果这只是你的应用程序内部的,那就是浪费。我浪费了大量的CPU时间,因为这需要至少两个IPC将您的整个意图从系统发送回应用程序,在您的时间,因为您需要确保您的数据以可以跨进程传输的方式放置在意图中。谢谢,通过使用ArrayList,我能够将其传递给putExtra()没有额外的工作,请注意使用序列化是非常昂贵的。正如文件所说,强烈反对这样做。
putExtra(String name, Bundle value)
public void sendIntent() {
Object data; // the object you want to pass through Intent
Map<String, Object> globalMap = getMyGlobalMap();
String uid = UUID.randomUUID().toString();
globalMap.put(uid, data);
intent.putExtra(EXTRA_OBJECT_UID, uid);
}
public void receiveIntent() {
String uid = intent.getStringExtra(EXTRA_OBJECT_UID);
Object data = getMyGlobalMap().get(uid); // Here is your data object.
}