【问题标题】:JSONObject why does getString not getting any value here?JSONObject 为什么 getString 在这里没有得到任何值?
【发布时间】:2013-05-31 21:24:35
【问题描述】:

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

看起来像这样:

{ "items":[{"value":"100","longitude":"11.584565599030755","latitude":"48.25420604757366","type":"timer"},{"value":"50","longitude ":"11.695457342867675","纬度":"48.34626913462275","类型":"稀有"},{"值":"1","经度":"11.6782003186674","纬度":"48.33575480986649","类型":"normal"},{"value":"1","longitude":"11.707280558203376","latitude":"48.19109880886268","type":"normal"}], “位置”:[{“用户名”:“宝贝”,“性别”:“女性”,“经度”:“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 的来源类型:

列表

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

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: 用户名没有值

我不太确定我在这里做错了什么......也许你们可以帮助我。如果您需要更多信息,请告诉我。谢谢

【问题讨论】:

    标签: java android json getstring


    【解决方案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,因为两个变量引用同一个列表。

    【讨论】:

    • 哦..我没有意识到这并没有复制整个列表。但它现在完全有道理。非常感谢。我会尽快将您的答案标记为正确。
    猜你喜欢
    • 1970-01-01
    • 2016-09-26
    • 2012-09-11
    • 2020-07-31
    • 2021-11-08
    • 2016-11-22
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多