我通过使用Simple
将多个对象附加到同一文件,从对象构建Android中的xml文件<listOfBtDevices>
<devices class="java.util.ArrayList">
<BTDevice>
<address>00:27:13:A3:2D:14</address>
<bondState>NONE</bondState>
<deviceType>LAPTOP</deviceType>
<name>LTPH</name>
<services>AUDIO CAPTURE NETWORKING OBJECT_TRANSFER RENDERING TELEPHONY</services>
<rssi>-95</rssi>
</BTDevice>
<BTDevice>
<address>00:27:13:A3:2D:14</address>
<bondState>NONE</bondState>
<deviceType>LAPTOP</deviceType>
<name>LTPH</name>
<services>AUDIO CAPTURE NETWORKING OBJECT_TRANSFER RENDERING TELEPHONY</services>
<rssi>-95</rssi>
</BTDevice>
<BTDevice>
<address>00:27:13:A3:2D:14</address>
<bondState>NONE</bondState>
<deviceType>LAPTOP</deviceType>
<name>LTPH</name>
<services>AUDIO CAPTURE NETWORKING OBJECT_TRANSFER RENDERING TELEPHONY</services>
<rssi>-95</rssi>
</BTDevice>
</devices>
<timestamp>22.11.2013_10.56.44</timestamp>
</listOfBtDevices>
<listOfBtDevices>
<devices class="java.util.ArrayList">
<BTDevice>
<address>00:27:13:A3:2D:14</address>
<bondState>NONE</bondState>
<deviceType>LAPTOP</deviceType>
<name>LTPH</name>
<services>AUDIO CAPTURE NETWORKING OBJECT_TRANSFER RENDERING TELEPHONY</services>
<rssi>-95</rssi>
</BTDevice>
</devices>
<timestamp>22.11.2013_10.56.50</timestamp>
</listOfBtDevices>
在上面的示例中,对象是ListOfBtDevices,它是(String)时间戳和BTDevice的ArrayList的复合。问题是我如何使用桌面计算机上的Simple或其他框架在多个ListOfBtDevice对象中反序列化它?
谢谢你,如果我犯了错误,我很抱歉,但我是JAVA的初学者。
答案 0 :(得分:0)
首先,为了能够反序列化xml文件,它需要有一个单根节点。不像你的情况那么多。
你有:
<listOfBtDevices>
...
</listOfBtDevices>
<listOfBtDevices>
...
</listOfBtDevices>
应该是什么样的:
<root>
<listOfBtDevices>
...
</listOfBtDevices>
<listOfBtDevices>
...
</listOfBtDevices>
</root>
之后,您需要使用Simple或XStream等框架进行反序列化。我会推荐Simple用于您的目的,我将使用Simple:
给您一个基本的例子要使用Simple将XML反序列化为对象,您必须创建与xml具有相同结构的模型类。您将使用@Element或@Attribute等注释描述对象如何映射到XML。在你的情况下,它看起来像这样:
首先,您需要一个与您的根节点对应的类:
// The name you enter here is how the root node is called in your xml
@Root(name = "root")
public class BluetoothDeviceListContainer {
// It contains a List, inline is set to true because the list items are directly inside the root node, each entry is called "listOfBtDevices"
@ElementList(entry = "listOfBtDevices", inline = true)
List<BluetoothDeviceList> bluetoothDeviceList;
}
在你用类完全描述你的xml之前,你继续这样做。接下来,您将创建一个类BluetoothDeviceList,它对应于“listOfBtDevices”节点,并输入包含的元素和属性以及此类等。
完成后,您可以像这样反序列化xml:
Serializer serializer = new Persister();
BluetoothDeviceListContainer container = serializer.read(BluetoothDeviceListContainer.class, xmlAsString);
添加一些getter后,如果你需要setter到你的模型类,你可以访问所有反序列化的属性,如下所示:
BluetoothDeviceList list = container.get(0);
...