如何通过DBus用Java发送{sv}?

时间:2018-08-02 12:04:15

标签: java dbus

我的目标是在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}”

我想念什么?

1 个答案:

答案 0 :(得分:0)

要确定您要发送的消息的类型,您需要对签名(具有的a{sv})进行解码。快速细分:

a =数组(列表)

{sv} =包含变体的字符串字典

因此,由于我们使用a{sv}作为签名,并且dbus-javajava.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/