【问题标题】:How to send a{sv} with java through DBus?如何通过 DBus 用 java 发送 {sv}?
【发布时间】:2019-01-10 04:47:26
【问题描述】:

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

(process:10144): GLib-CRITICAL **: GVariant 格式字符串“a{sv}”的类型为“a{sv}”,但给定值的类型为“{sv}”

我错过了什么?

【问题讨论】:

    标签: java dbus


    【解决方案1】:

    要确定您发送的消息的类型,您需要解码签名(您拥有的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/

    【讨论】:

      猜你喜欢
      • 2021-11-18
      • 2013-10-08
      • 2018-03-10
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 2021-06-30
      相关资源
      最近更新 更多