如何访问User.getAddresses()和User.getPhones()返回的Java对象中的数据?
在中,许多方法,例如如何访问User.getAddresses()和User.getPhones()返回的Java对象中的数据?,java,api,Java,Api,在中,许多方法,例如getAddresses()和getPhones(),返回一个我不知道该怎么处理的Java对象 使用toString(),我可以看到我想要的数据在对象中(看起来像一个HashMaps列表),但我不知道如何将其转换为我可以访问的表单,例如UserAddress或UserPhone的列表或数组 我还想知道如何构建这样的对象,以便能够更新用户(尽管我认为问题的第一部分的答案可能会使如何构建它们变得显而易见) 我已经能够更新其他不涉及此类对象的内容,因此我一般不需要阅读和更新方面的帮
getAddresses()
和getPhones()
,返回一个我不知道该怎么处理的Java对象
使用toString()
,我可以看到我想要的数据在对象中(看起来像一个HashMaps列表),但我不知道如何将其转换为我可以访问的表单,例如UserAddress
或UserPhone
的列表或数组
我还想知道如何构建这样的对象,以便能够更新用户(尽管我认为问题的第一部分的答案可能会使如何构建它们变得显而易见)
我已经能够更新其他不涉及此类对象的内容,因此我一般不需要阅读和更新方面的帮助,但我已经与这些对象斗争了几天,无法解决它。谢谢。我相信这些方法会返回一个集合,在这种情况下,您可能希望通过迭代器访问它们包含的项。像这样的方法应该会奏效:
ListIterator addresses = user.getAddresses().iterator();
while(addresses.hasNext()) {
Address address = addresses.next();
// do something with the address
}
如果您不熟悉迭代器对象,本文可能会有所帮助:谢谢,但是User.getAddresses()和User.getPhones()没有迭代器方法,因此这里提出的两个答案都不起作用 “
ListIterator addresses=user.getAddresses().iterator();
”获取编译器错误“类型对象的迭代器()方法未定义”
“for(UserAddress addr:user.getAddresses())
”获取编译器错误“只能迭代java.lang.Iterable的数组或实例”
不过,我终于找到了完成工作的方法。下面的代码实际上是有效的,尽管很难相信这是我“应该”的方式
ArrayList phones=(ArrayList)user.getPhones();
用于(阵列映射电话:电话)
System.out.println(phone.get(“type”)+“=”+phone.get(“value”));
将数据放入UserPhone实例会很好,但我不知道如何做(除了为每个可能的关键字执行get&UserPhone.setXxxx)
我可以通过传递User.setPhones()更新电话号码,这是我从头构建的
ArrayList
。Google Directoy API使用JSON进行通信。用于与API通信的Java客户端库解析并序列化JSON与Java对象之间的通信,以便于在代码中使用。看看这里,了解一下它是如何工作的:
当前版本的库的问题在于它没有将User
类中的所有字段序列化为可用对象。相反,映射或映射列表用于复杂字段。例如,phones
字段应转换为UserPhone
对象列表,但应改为地图列表。唯一正确序列化的字段是名称
字段,它是用户名
对象
手动将映射转换为正确对象的一种方法是使用像Gson这样的json解析器并解析映射。像这样:
Gson gson = new GsonBuilder().create();
ArrayList phones = (ArrayList) user.getPhones();
for (Object phone : phones) {
UserPhone userPhone = gson.fromJson(phone.toString(), UserPhone.class);
System.out.println(userPhone.getType() + "=" + userPhone.getValue());
}
在这种情况下,我建议使用foreach循环。
Gson gson = new GsonBuilder().create();
ArrayList phones = (ArrayList) user.getPhones();
for (Object phone : phones) {
UserPhone userPhone = gson.fromJson(phone.toString(), UserPhone.class);
System.out.println(userPhone.getType() + "=" + userPhone.getValue());
}