我的目标是在DBus上发送键值字典,接收并处理它。
我创建了字典并添加了一些值:
Map<String, Variant<?>> argumentsToSend = new HashMap<String, Variant<?>>();
argumentsToSend.put("arg1", new Variant<Integer>(111));
argumentsToSend.put("arg2", new Variant<Integer>(222));
proxy.getObject().useTheseArgs(argumentsToSend);
字典已发送,但在接收方被视为{sv}而不是{sv}。
(进程:10144):语法严重**:GVariant格式字符串“ a {sv}”的类型为“ a {sv}”,但给定值的类型为“ {sv}” >
我想念什么?
答案 0 :(得分:0)
要确定您要发送的消息的类型,您需要对签名(具有的a{sv}
)进行解码。快速细分:
a
=数组(列表)
{sv}
=包含变体的字符串字典
因此,由于我们使用a{sv}
作为签名,并且dbus-java
将java.util.list
转换为DBus数组,因此您要做的就是将代码更改为类似于以下内容的代码:
List<Map<String, Variant<?>>> argumentsToSend = new ArrayList<>();
argumentsToSend.add( new HashMap<String, Variant<?>>() );
argumentsToSend.add( new HashMap<String, Variant<?>>() );
argumentsToSend.get(0).put("arg1", new Variant<Integer>(111));
argumentsToSend.get(1).put("arg2", new Variant<Integer>(222));
proxy.getObject().useTheseArgs(argumentsToSend);
有关类型的更多信息(还包括一个a{sv}
示例):https://rm5248.com/d-bus-tutorial/