2013-05-31 72 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

相关问题