签名在Alljoyn框架上获取错误?

时间:2013-08-23 07:19:31

标签: alljoyn

我正在使用Android应用程序使用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周内出现这个错误。

抱歉,因为我的英语太差了:)

1 个答案:

答案 0 :(得分:0)

查看您的代码,看起来您要发送的是一个结构,结构的签名应该是"r",或者是由括号()包围的实际签名。即Package签名为"(sayiis)"

  • 使用AllJoyn,您可以发送数组但不能发送ArrayList,并且必须指定数组中的数据类型。
  • 由于您DataSendType指定了TEXTIMAGE,我假设您要发送一个字节数组。
  • 我没有添加签名的大多数项目,因为AllJoyn可以使用反射找出签名。然而,AllJoyn不知道枚举将作为整数传输,所以我必须指定枚举的签名。
  • 包没有实现BusObject。在您的代码中实现应扩展SimpleInterface和`BusObject'的SimpleInterface
  • 使用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",对于struct,签名"o"表示对象路径。这是一个AllJoyn对象路径,这意味着它只是一个包含路径数据的字符串。

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

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

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