JSONObject为什么getString在这里没有得到任何值?

时间:2013-05-31 21:24:36

标签: java android json getstring

我在解析我的服务器和Android设备之间的JSONObject发送时遇到问题。

看起来像这样:

  

{   “项”:[{ “值”: “100”, “经度”: “11.584565599030755”, “纬度”: “48.25420604757366”, “类型”: “计时器”},{ “值”: “50”,“经度“:” 11.695457342867675" , “纬度”: “48.34626913462275”, “类型”: “罕见”},{ “值”: “1”, “经度”: “11.6782003186674”, “纬度”: “48.33575480986649”,“类型“:” 正常 “},{” 值 “:” 1" , “经度”: “11.707280558203376”, “纬度”: “48.19109880886268”, “类型”: “正常”}],   “位置”:[{ “用户名”: “巴宾”, “性别”: “女”, “经度”: “11.670796394348145”, “纬度”: “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来自类型:

  

列表与LT; \&的JSONObject GT;

稍后我会为每个列表项创建叠加层,如下所示:

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 个答案:

答案 0 :(得分: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一样,因为两个变量都引用相同的列表。