3 вопроса по работе с json в java, как решить данную задачу?

У меня несколько трудностей, которые я не смог решить самостоятельно, обо всем по порядку.

Есть json file, который я показываю в ListView, и он выглядит следующим образом:

  • countryData.json
{
  "CountryData": [
    {
      "Name": "Bangladesh",
      "Unicode": "??",
      "Dial": "880"
    },
    {
      "Name": "Belgium",
      "Unicode": "??",
      "Dial": "32"
    }...
  ]
}
  • java code
ArrayList<HashMap<String, String>> arrayList = new ArrayList<>();
JSONObject jsonObject;
JSONArray jsonArray;
String jsonFile;
String unicode;
String name;
String dial;

try {

    InputStream stream = getAssets().open("json/countryData.json");
    int size = stream.available();
    byte[] buffer = new byte[size];
    stream.read(buffer);
    stream.close();
    jsonFile = new String(buffer);

    jsonObject = new JSONObject(jsonFile);
    jsonArray = jsonObject.getJSONArray("CountryData");

    for (int i = 0; i < jsonArray.length(); i++) {

        jsonObject = jsonArray.getJSONObject(i);

        unicode = jsonObject.getString("Unicode");
        name = jsonObject.getString("Name");
        dial = jsonObject.getString("Dial");

        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("Unicode", unicode);
        hashMap.put("Name", name);
        hashMap.put("Dial", "+"+dial);

        arrayList.add(hashMap);
    }
} catch (JSONException | IOException e) {
    Toast.makeText(getApplicationContext(), "json file is not found", Toast.LENGTH_LONG).show();
}
  • адаптер, который передает данные в ListView
adapter = new SimpleAdapter(
    LoginActivity.this, arrayList, R.layout.simple_layout,
    new String[] {"Unicode", "Name", "Dial"},
    new int[] {R.id.countryUnicode,R.id.countryName, R.id.countryCodeList}
);
selectCountry.setAdapter(adapter);
  • результат

результат

Код работает, но не совсем корректно.

Вернемся к вопросам.

  1. Список стран в ListView выходит по порядку, как написано в Json файле, как сделать, чтобы показывал по алфавиту от А до Я?

  2. Когда я выбираю из списка какую-нибудь страну, в Editext (TextInputLayout) возвращается весь объект {Unicode=??, Dial=+7, Name=Russia} Как вывести только название выбранной страны?

  3. Как получить страну автоматически в поле Выбор страны, когда пользователь вводит код страны в поле Код страны и наоборот?

введите сюда описание изображения

Любая помощь приветствуется.


Ответы (0 шт):