簡體   English   中英

如何從頭到尾對json進行排序

[英]How to sort json bottom to top

我想從頭到尾對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

簡單的使循環反向:

 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); 
 }

在您的convertStremToString方法中。 嘗試將這些行存儲到堆棧中,然后在while循環之后將它們打印出來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM