没有得到反向清单

时间:2012-12-22 05:10:50

标签: android

我正在解析从服务器获取的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);

如果我尝试按正确的顺序执行此操作,则会显示该列表。但如果我尝试反向,我将不会得到任何输出。问题在于循环。但无法找到实际的位置。

5 个答案:

答案 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);