2

我正在使用 Android App 使用 Alljoyn 框架,我有一些问题

我有一个自定义对象

public class Package implements BusObject {


    public static enum DataSendType {
        TEXT,IMAGE
    }

    public static enum PackageStatus {
        NONE, SENDING, DONE
    }

    @Signature("s")
    private String m_id;
    @Signature("a")
    private ArrayList<DataPackage> m_listPackage;
    @Signature("r")
    private PackageStatus m_status;
    @Signature("r")
    private DataSendType m_type;
    @Signature("s")
    private String m_packageName;
}

和接口

@BusInterface (name="xxxx.simpleinterface")
public interface SimpleInterface {

    @BusSignal (name="Chat", signature="o")
    public void Chat(Package message) throws BusException;
}

但是当使用聊天(包)时,我得到这个错误不能将类包编组为'o' 。

请帮助我,因为我无法在 2 周内解决此错误。

对不起,因为我的英语太糟糕了:)

4

1 回答 1

0

查看您的代码,您尝试发送的内容似乎是一个结构,该结构的签名应该是,或者由括号和."r"包围的实际签名。即签名将是()Package"(sayiis)"

  • 使用 AllJoyn,您可以发送一个数组,但不能发送一个,ArrayList并且您必须指定数组中的数据类型。
  • 由于您DataSendType指定TEXTIMAGE我假设您要发送一个字节数组。
  • 大多数项目我没有添加签名,因为 AllJoyn 可以使用反射找出签名。然而,AllJoyn 不知道枚举将作为整数传输,因此我必须为枚举指定签名。
  • 包不必实现 BusObject。在你的代码中,当你实现你的SimpleInterface那应该扩展SimpleInterface和`BusObject'
  • 使用 AllJoyn 发送的任何内容都应该是公开的,以便接口可以读取成员变量。

    public class Package {
        public static enum DataSendType{
            TEXT,
            IMAGE
        }
    
        public static enum PackageStatus {
            NONE,
            SENDING,
            DONE
        }
    
        @Position(0)
        public String m_id;
        @Position(1)
        public byte[] m_listPackage;
        @Position(2)
        @Signature("i")
        public PackageStatus m_status;
        @Position(3)
        @Signature("i")
        public DataSendType m_type;
        @Position(4)
        public String m_packageName;
    }
    

对于接口,签名应该是"r"结构签名"o"意味着对象路径。这是一个 AllJoyn 对象路径,这意味着它只是一个带有路径数据的字符串。

@BusInterface (name="xxxx.simpleinterface")
public interface SimpleInterface {

    @BusSignal (name="Chat", signature="r")
    public void Chat(Package message) throws BusException;
}

Chat如果您确实需要使用 ArrayList,请在发送信号之前将 ArrayList 转换为实际数组。

于 2013-09-17T16:51:28.000 回答