2013-05-31 79 views
0

我在解析服務器和Android設備之間發送的JSONObject時遇到問題。JSONObject爲什麼getString在這裏沒有任何價值?

它看起來像這樣:

{ 「項」:[{ 「值」: 「100」, 「經度」: 「11.584565599030755」, 「緯度」: 「48.25420604757366」, 「類型」 : 「計時器」},{ 「值」: 「50」, 「經度」: 「11.695457342867675」, 「緯度」: 「48.34626913462275」, 「類型」: 「罕見」},{ 「值」: 「1」,」經度 「:」 11.6782003186674" , 「緯度」: 「48.33575480986649」, 「類型」: 「正常」},{ 「值」: 「1」, 「經度」: 「11.707280558203376」, 「緯度」: 「48.19109880886268」,」類型「:」normal「}], 」locations「:[{」username「:」babine「,」gender「:」female「,」longitude「:」11.670796394348145「,」latitude「:」48.26356506347656「}] }

這是我的設備實際上從服務器接收到的內容。 現在拆分這件事是這樣的:

JSONArray locations= json.getJSONArray("locations"); 
List<JSONObject> list = new ArrayList<JSONObject>(); 
for (int i= 0; i < locations.length(); i++) { 
    list.add(locations.getJSONObject(i)); 
} 
LocationEvent.players = list; 

JSONArray items = json.getJSONArray("items"); 
list.clear(); 
for (int i= 0; i < items.length(); i++){ 
    list.add(items.getJSONObject(i)); 
} 
Item.items = list; 

凡Item.items和LocationEvent.players從類型:

列表< \的JSONObject>

後,我創造了疊加每個列表項目如下:

players.clear(); 
for(JSONObject player: LocationEvent.getAllPlayers()){  
    UserOverlay user = new UserOverlay(game, player.getString("username"), player.getString("gender"), Double.valueOf(player.getString("latitude")), Double.valueOf(player.getString("longitude"))); 
    players.add(user); 
} 

items.clear(); 
for(JSONObject item : Item.getAllItems()){ 
    ItemOverlay itemOv = new ItemOverlay(game, type, Double.valueOf(item.getString("longitude")), Double.valueOf(item.getString("latitude"))); 
    items.add(itemOv); 
} 

這裏是其中JSONException發生:

org.json.JSONException:用戶名

沒有價值,我不太清楚我在做什麼錯在這裏...也許你們能幫助我出去了。如果您需要更多信息,請告訴我。由於

回答

1

的問題是,你重複使用相同的列表來存儲項目:

List<JSONObject> list = new ArrayList<JSONObject>(); 
for (int i= 0; i < locations.length(); i++) { 
    list.add(locations.getJSONObject(i)); 
} 
LocationEvent.players = list; 

這裏,Location.players包含位置

JSONArray items = json.getJSONArray("items"); 
list.clear(); 

但現在它不含有什麼了:你剛剛清除它。

for (int i= 0; i < items.length(); i++){ 
    list.add(items.getJSONObject(i)); 
} 
Item.items = list; 

現在Location.players包含的項目,就像Item.items,因爲這兩個變量引用同一個列表。

+0

哦..我沒有意識到這並不複製整個列表。但現在它總是有意義的。非常感謝。我會盡快回答你的回答是否正確。 – puelo

相關問題