1

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

如果我尝试以正确的顺序执行此操作,则会出现列表。但是如果我尝试反向,我不会得到任何输出。问题在于 for 循环。但无法找出它实际上在哪里。

4

5 回答 5

1

是的,问题出在循环中。第一次通过应该抛出某种“越界”异常,因为products.getJSONObject(products.length())不存在。在 logcat 中查看详细信息,和/或使用调试器单步执行您的代码。请记住,对于零索引集合(数组、列表等),最小索引值是集合中元素总数0,最大的索引值是 1 。

解决方法是改变这一点:

for(int i = products.length(); i >0; i--){

对此:

for(int i = products.length() - 1; i >= 0; i--){
于 2012-12-22T05:14:04.687 回答
1

改变你的for循环语法如下

for(int i = products.length() - 1; i >= 0; i--){
//  your Code
}
于 2012-12-22T05:17:03.663 回答
1

像这样改变你的循环

   for(int i = products.length()-1; i >=0; i--){

它应该工作

于 2012-12-22T05:20:08.150 回答
0

在解析 json 和创建适配器之间添加:

Collections.reverse(contactList);
于 2012-12-23T12:16:37.050 回答
0

要反转列表:-

ArrayList<Element> tempElements = new ArrayList<Element>(mElements);
Collections.reverse(tempElements);
于 2016-06-21T05:20:21.603 回答