我正在使用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周内出现这个错误。
抱歉,因为我的英语太差了:)答案 0 :(得分:0)
查看您的代码,看起来您要发送的是一个结构,结构的签名应该是"r"
,或者是由括号(
和)
包围的实际签名。即Package
签名为"(sayiis)"
ArrayList
,并且必须指定数组中的数据类型。 DataSendType
指定了TEXT
或IMAGE
,我假设您要发送一个字节数组。 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转换为实际数组。