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 に答える