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

标签 java android json getstring

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

看起来像这样:

{ "items":[{"value":"100","longitude":"11.584565599030755","latitude":"48.25420604757366","type":"timer"},{"value":"50","longitude":"11.695457342867675","latitude":"48.34626913462275","type":"rare"},{"value":"1","longitude":"11.6782003186674","latitude":"48.33575480986649","type":"normal"},{"value":"1","longitude":"11.707280558203376","latitude":"48.19109880886268","type":"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 来自类型:

List<\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: No value for username

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

最佳答案

问题是您重复使用相同的列表来存储项目:

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 一样,因为两个变量都引用相同的列表。

关于java - JSONObject 为什么 getString 在这里没有得到任何值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16866229/

相关文章:

java - MS SQL 异常 : Incorrect syntax near '@P0'

java - 通过 Tab 键导航无法正常工作

android - 如何让滑动抽屉远离虚拟键盘的顶部

javascript - JSON 数组未在 Google map 中获取

json - 我如何使用 Go 漂亮地打印 JSON?

java - 如何以 Logbacks 的 HTML 格式输出亚洲字符

java - 动画仅在第一次单击按钮时移动

java - 动画 View 超出父容器android

Android:使用动画显示/隐藏 View

java - java中JSON动态反序列化