如何从json底部到顶部排序

时间:2017-12-05 02:19:21

标签: android json

我想将json从头到尾排序,我可以从上到下解析json,但我需要从头到尾。

有可能吗?我怎么能这样做?

我可以使用以下代码解析json:

MainActivity文件:

public class MainActivity extends AppCompatActivity {

    private ListView lv;
    private static String url = "https://api.androidhive.info/contacts/";

    ArrayList<HashMap<String, String>> contactList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        contactList = new ArrayList<>();

        lv = (ListView) findViewById(R.id.list);

        new GetContacts().execute();
    }

    private class GetContacts extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground(Void... arg0) {
            HttpHandler sh = new HttpHandler();

            String jsonStr = sh.makeServiceCall(url);
            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);
                    JSONArray contacts = jsonObj.getJSONArray("contacts");
                    for (int i = 0; i < contacts.length(); i++) {
                        JSONObject c = contacts.getJSONObject(i);

                        String name = c.getString("name");
                        String email = c.getString("email");

                        HashMap<String, String> contact = new HashMap<>();

                        contact.put("name", name);
                        contact.put("email", email);
                        contactList.add(contact);
                    }
                } catch (final JSONException e) {
                }
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);

            ListAdapter adapter = new SimpleAdapter(
                    MainActivity.this, contactList,
                    R.layout.list_item, new String[]{"name", "email"}, new int[]{R.id.name,
                    R.id.email});

            lv.setAdapter(adapter);
        }
    }
}

HttpHandler文件:

public class HttpHandler {

    public String makeServiceCall(String reqUrl) {
        String response = null;
        try {
            URL url = new URL(reqUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            // read the response
            InputStream in = new BufferedInputStream(conn.getInputStream());
            response = convertStreamToString(in);
        } catch (Exception e) {
        }
        return response;
    }

    private String convertStreamToString(InputStream is) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();

        String line;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line).append('\n');
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }
}

json文件:

{
    "contacts": [
        {
                "name": "leonardo",
                "email": "leonardo@gmail.com"
                }
        },
        {
                "name": "Johnny",
                "email": "johnny@gmail.com"
                }
        },
        {
                "name": "jack",
                "email": "jack@gmail.com"
                }
        }
        {
                "name": "paul",
                "email": "paul@gmail.com"
                }
        }
  ]
}

输出:

leonardo - leonardo@gmail.com
-----------------------------
johnny - johnny@gmail.com
-----------------------------
jack - jack@gmail.com
-----------------------------
paul - paul@gmail.com

但首先我要展示最后一项:

paul - paul@gmail.com
-----------------------------
jack - jack@gmail.com
-----------------------------
johnny - johnny@gmail.com
-----------------------------
leonardo - leonardo@gmail.com

2 个答案:

答案 0 :(得分:0)

简单的make循环反转:

 for (int i = contacts.length()-1; i>=0; i--)      
 { 
      JSONObject c = contacts.getJSONObject(i); 
      String name = c.getString("name"); 
      String email = c.getString("email"); 
      HashMap<String, String> contact = new HashMap<>(); 
      contact.put("name", name); 
      contact.put("email", email); 
      contactList.add(contact); 
 }

答案 1 :(得分:0)

在convertStremToString方法中。尝试将线存储到堆栈中,然后在while循环后打印出来。