Шаг 260.
Основы Kotlin.
Знакомство с сопрограммами. Парсинг характеристик персонажа
На этом шаге мы рассмотрим, как можно распарсить полученные данные.
Веб-служба, возвращающая характеристики персонажа, доступна по ссылке https://chargen-api.herokuapp.com.
Кстати, она написана на Kotlin с применением веб-фреймворка Ktor (https://github.com/ktorio/ktor.)
Если вам интересно посмотреть на исходный код, это можно сделать по адресу https://github.com/bignerdranch/character-data-api.
В ответ на запрос веб-служба возвращает список из характеристик персонажа, таких как race, name, dex, wis и str, разделенных запятыми, например такое:
halfling,Lars Kizzy,14,13,8
Ваше первое задание - преобразовать строку с характеристиками персонажа, возвращаемую веб-службой, в экземпляр CharacterData который можно отобразить в UI.
Давайте начнем. Откройте CharacterGenerator.kt в AndroidStudio и объявите функцию преобразования fromApiData().
. . . .
object CharacterGenerator {
data class CharacterData(val name: String,
val race: String,
val dex: String,
val wis: String,
val str: String) : Serializable
. . . .
fun fromApiData(apiData: String): CharacterData {
val (race, name, dex, wis, str) =
apiData.split(",")
return CharacterData(name, race, dex, wis, str)
}
}

Рис.1. Добавление функции fromApiData() (CharacterGenerator.kt)
Функция fromApiData() принимает строку со значениями, полученную от веб-службы, разбивает ее по запятым и записывает результаты в новый экземпляр CharacterData.
Проверьте fromApiData(), вызвав ее нажатием кнопки GENERATE. Для примера передадим фиктивные данные.
private const val CHARACTER_DATA_KEY = "CHARACTER_DATA_KEY"
class MainActivity : AppCompatActivity() {
. . . .
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// setContentView(R.layout.activity_main)
val binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
characterData = savedInstanceState?.characterData ?:
CharacterGenerator.generate()
binding.generateButton.setOnClickListener {
characterData = CharacterGenerator.//generate()
fromApiData("halfling,Lars Kizzy,14,13,8")
displayCharacterData(binding)
}
displayCharacterData(binding)
}
. . . .
}
Файл с проектом можно взять
здесь.

Рис.2. Тестирование функции fromApiData() (MainActivity.kt)
Запустите Samodelkin в эмуляторе, чтобы убедиться, что все работает. Нажмите кнопку GENERATE. Вы увидите в UI тестовые данные, переданные в функцию преобразования (рисунок 3).

Рис.3. Отображение тестовых данных
На следующем шаге мы рассмотрим извлечение оперативных данных.
Предыдущий шаг
Содержание
Следующий шаг