Без лишних слов перейдем к коду и для начала создадим Java-bean класс Valute который содержит 4 свойства: название валюты, сокращенное название, текущее значение и предыдущее значение:
public class Valute {
private String Name;
private String CharCode;
private String Value;
private String Previous;
public Valute(String Name, String CharCode, String Value, String Previous) {
this.Name = Name;
this.CharCode = CharCode;
this.Value = Value;
this.Previous = Previous;
}
public String getName() {
return Name;
}
public String getCharCode() {
return CharCode;
}
public String getValue() {
return Value;
}
public String getPrevious() {
return Previous;
}
public void setName(String Name) {
this.Name = Name;
}
public void setCharCode(String CharCode) {
this.CharCode = CharCode;
}
public void setValue(String Value) {
this.Value = Value;
}
public void setPrevious(String Previous) {
this.Previous = Previous;
}
}
После того как мы создали данный класс мы можем использовать его в ArrayList. Изменим адаптер списка ListAdapter. Изменим строку:
private ArrayList<Integer> arrayList = new ArrayList<>();
на
private ArrayList<Valute> arrayList = new ArrayList<>();
Строку:
public void setItems(ArrayList<Integer> arrayList1) {
arrayList = arrayList1;
}
на:
public void setItems(ArrayList<Valute> valutesList) {
arrayList = valutesList;
}
Изменим переменную которая подается на вход в метод bind аналогично:
void bind(Valute valute)
Сам метод так же получит изменение, воспользуемся "геттерами" для извлечения данных из текущего объекта valute:
void bind(Valute valute) {
nameItemView.setText(valute.getName());
CharCodeItemView.setText(valute.getCharCode());
ValueItemView.setText("1 " + valute.getCharCode() + " = " + valute.getValue() + " RUB");
PreviousItemView.setText("1 " + valute.getCharCode() + " = " + valute.getPrevious() + " RUB");
}
Следующим шагом изменим класс Main. Изменим глобальную переменную arrayList на:
private ArrayList<Valute> arrayList;
Далее в методе onPostExecute изменим строку добавления в arrayList новых элементов, используем созданный ранее класс Valute:
arrayList.add(new Valute(Name, CharCode, Value, Previous));
Удалим переменную i за ненадобностью. Полный код метода будет выглядеть следующим образом:
@Override
protected void onPostExecute(String response) {
listAdapter = new ListAdapter();
arrayList = new ArrayList<>();
String Name = "";
String CharCode = "";
String Value = "";
String Previous = "";
try {
JSONObject jsonResponce = new JSONObject(response);
JSONObject jsonObject = jsonResponce.getJSONObject("Valute");
Iterator<String> keys = jsonObject.keys();
while (keys.hasNext()) {
String key = keys.next();
Name = jsonObject.getJSONObject(key).getString("Name");
CharCode = jsonObject.getJSONObject(key).getString("CharCode");
Value = jsonObject.getJSONObject(key).getString("Value");
Previous = jsonObject.getJSONObject(key).getString("Previous");
arrayList.add(new Valute(Name, CharCode, Value, Previous));
}
listAdapter.setItems(arrayList);
recyclerList.setAdapter(listAdapter);
} catch (Exception e) {
e.printStackTrace();
}
}
На этом изменения в коде закончились, осталось запустить приложение и посмотреть на результат:
Как можно видеть все отлично работает. Курсы валют подгружаются с сайта и выводятся с помощью нашего форматированного списка.
На первый взгляд кажется что приложение успешно работает, но в его работе есть множество недочетов, которые мы и будем исправлять в следующих частях.