HY!
我有一个带有电视频道的JSON数组,数组的长度为3,但在传输到树形图后,Value只有一个。
请帮助
代码:
try
{
JSONObject menuobj = this.getJSONObject("responseData");
Log.e("XXX", menuobj.toString());
JSONArray array = menuobj.getJSONArray("countries");
TreeMap<String, Integer> map = new TreeMap<String, Integer>();
for (int i = 0; i < array.length(); i++)
{
JSONObject obj = new JSONObject();
obj = array.getJSONObject(i);
if (obj.getString("name").equals(country))
{
Log.e("XXX2", obj.toString());
JSONArray arr = obj.getJSONArray("channels");
Log.e("XXX3", String.valueOf(arr.length()));
for (int j = 0; j < arr.length(); j++)
{
JSONObject obj2 = new JSONObject();
obj2 = arr.getJSONObject(i);
map.put(obj2.getString("name"), obj2.getInt("id"));
}
Log.e("XXX4", String.valueOf(map.size()));
return map;
}
}
logcat的:
02-01 18:24:20.277: ERROR/XXX(3784): {"countries":[{"id":"1","channels":[{"id":"3","name":"ARD"},{"id":"1","name":"ORF 1"},{"id":"2","name":"ORF 2"}],"name":"Ã?sterreich"},{"id":"2","channels":[{"id":"3","name":"ARD"}],"name":"Deutschland"}]}
02-01 18:24:20.288: ERROR/XXX2(3784): {"id":"1","channels":[{"id":"3","name":"ARD"},{"id":"1","name":"ORF 1"},{"id":"2","name":"ORF 2"}],"name":"Ã?sterreich"}
02-01 18:24:20.297: ERROR/XXX3(3784): 3
02-01 18:24:20.307: ERROR/XXX4(3784): 1
答案 0 :(得分:2)
我相信:
obj2 = arr.getJSONObject(i);
应该是
obj2 = arr.getJSONObject(j);
所以你要将相同的键/值对象放三次到地图上。
答案 1 :(得分:0)
您需要使用JSONArray
而不使用JSONObject
:
JSONArray resultJson = new JSONArray(responseDataString);
答案 2 :(得分:0)
您错过了重要的日志记录详细信息,请将其命名为XXX3.5
。几乎可以肯定的是,地图包含一个元素,因为每次调用map.put()
都会传入一个被认为等于地图中已经存在的键的键。
现在我希望这些键是通道的字符串名称,这些名称是截然不同的,所以很明显,这种期望并不成立。添加obj2.getString("name")
的日志消息(或者在那里设置断点)将让您看到映射键实际是什么,以及后续调用覆盖现有映射的原因。输出对象的实际类也很有用,以便区分实际的String
和仅包含String的某个类。
如果元素看起来合理,问题可能是对所讨论的类的equals()
的松散定义,这等同于应该看起来不同的元素。无论如何,更好的日志记录将显示原因
arr.getJSONObject(0).getString("name").equals(arr.getJSONObject(1).getString("name")
当你希望它返回false时,返回true。