我正在解析从服务器获取的json对象。我想以相反的顺序列出列表。为了做到这一点,我制作了这样的代码。
ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();
// Creating JSON Parser instance
JSONParser jParser = new JSONParser();
// getting JSON string from URL
JSONObject json = jParser.getJSONFromUrl(url);
try {
// Getting Array of Contacts
products = json.getJSONArray(TAG_PRODUCTS);
// looping through All Contacts
for(int i = products.length(); i >0; i--){
JSONObject c = products.getJSONObject(i);
// Storing each json item in variable
String cid = c.getString(TAG_CID);
String name = c.getString(TAG_NAME);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_CID, cid);
map.put(TAG_NAME, name);
// adding HashList to ArrayList
contactList.add(map);
Log.d("value", contactList.toString());
}
} catch (JSONException e) {
e.printStackTrace();
}
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(this, contactList,
R.layout.list_item,
new String[] { TAG_NAME,}, new int[] {
R.id.name});
setListAdapter(adapter);
如果我尝试按正确的顺序执行此操作,则会显示该列表。但如果我尝试反向,我将不会得到任何输出。问题在于循环。但无法找到实际的位置。
答案 0 :(得分:1)
是的,问题出在循环中。第一次传递应该抛出某种“越界”异常,因为products.getJSONObject(products.length())
不存在。在logcat中查找详细信息,和/或使用调试器逐步执行代码。请记住,对于零索引集合(数组,列表等),最小索引值为0
,最大值为1 less ,而不是集合中元素的总数。
修复方法是改变这个:
for(int i = products.length(); i >0; i--){
到此:
for(int i = products.length() - 1; i >= 0; i--){
答案 1 :(得分:1)
将for循环语法更改为
for(int i = products.length() - 1; i >= 0; i--){
// your Code
}
答案 2 :(得分:1)
像这样改变你的循环
for(int i = products.length()-1; i >=0; i--){
应该有效
答案 3 :(得分:0)
在解析json和创建适配器之间添加它:
Collections.reverse(contactList);
答案 4 :(得分:0)
要反转列表: -
ArrayList<Element> tempElements = new ArrayList<Element>(mElements);
Collections.reverse(tempElements);