2014-10-18 14 views
2

com.google.api.services.admin.directory.model.User中,許多方法(如getAddresses()getPhones())返回一個Java對象,我無法弄清楚該如何處理。如何訪問由User.getAddresses()和User.getPhones()返回的Java對象中的數據?

使用toString(),我可以看到我想要的數據在對象中(看起來像是一個HashMap的列表),但我無法弄清楚如何將它轉換爲我可以訪問的窗體,例如UserAddressUserPhone的列表或數組?我也想知道如何構建這樣的對象,以便我可以更新用戶(雖然我想這可能是我的問題的第一部分的答案可能會使如何建立它們顯而易見)????????????????????????

我已經能夠更新其他不涉及這些對象的東西,所以我不需要幫助閱讀和更新一般,但我已經與這些對象奮鬥了幾天,現在可以不知道。謝謝。

回答

0

我相信這些方法會返回一個集合,在這種情況下,您可能想通過它們的迭代器訪問它們包含的項目。像這樣的東西應該工作:

ListIterator addresses = user.getAddresses().iterator(); 

while(addresses.hasNext()) { 
    Address address = addresses.next(); 
    // do something with the address 
} 

如果你不熟悉的Iterator對象,這篇文章可能會有所幫助:How to use Iterator

+1

我會建議在這種情況下的foreach循環。 – marczellm 2014-10-18 19:40:15

0

謝謝,但User.getAddresses()和User.getPhones()做沒有迭代器方法,所以這裏提出的答案都不會起作用。

ListIterator addresses = user.getAddresses().iterator();」得到編譯器錯誤「方法iterator()未定義類型Object」。

for (UserAddress addr : user.getAddresses())」得到編譯器錯誤「只能遍歷數組或java.lang.Iterable的實例」。

儘管如此,我終於找到了一種完成工作的方法。以下代碼實際上是有效的,儘管很難相信這是我「應該」這樣做的方式。

ArrayList<ArrayMap<String,String>> phones = (ArrayList<ArrayMap<String,String>>)user.getPhones(); 
for (ArrayMap<String,String> phone : phones) 
    System.out.println(phone.get("type") + "=" + phone.get("value")); 

它會是不錯的數據進入USERPHONE的實例,但我無法弄清楚如何做到這一點(而不是做一個得到& UserPhone.setXxxx每一個可能的關鍵字)。

我能夠通過傳遞我從頭開始構建的User.setPhones()ArrayList<UserPhone>來更新電話號碼。

2

Google Directoy API使用JSON進行通信。用於與API通信的Java客戶端庫分析並序列化Java對象中的JSON,以便於在代碼中使用。在這裏看看它的工作原理:https://code.google.com/p/google-http-java-client/wiki/JSON

該庫的當前版本的問題是,它不會將User類中的所有字段序列化爲可用對象。相反,地圖或地圖列表用於複雜的領域。例如phones字段應該變成一個UserPhone對象的列表,而是成爲一張地圖列表。唯一被正確序列化的字段是name字段,它是一個UserName對象。

手動將地圖轉換爲正確對象的一種方法是使用像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()); 
} 
相關問題