JavaRush /Курсы /Курс "Программирование под Андроид" /Считываем данные из View-элементов

Считываем данные из View-элементов

Курс "Программирование под Андроид"
8 уровень , 22 лекция
Открыта

Обзор получающих и устанавливающих методов

Вам уже встречались такие методы, как setText (установить текст) и setImageResource (установить картинку). Такие методы называют сеттерами, то есть устанавливающими, потому что они устанавливают одно из значений View (например, хранимый в нём текст или картинку). Они традиционно начинаются со слова set (установить).

Есть еще такая категория методов, как геттеры, то есть получающие, их единственное предназначение — получить одно из значений View, например, текст, который на данный момент установлен. Они традиционно начинаются со слова get (получить). Мы будем использовать геттеры в следующем упражнении.

Записи в журнал (логи)

Для этого упражнения Вам понадобится еще один навык — делать записи в журнал Андроид (так называемые логи). Подробнее можно почитать здесь, но если коротко, то в Java-коде Вы пишете что-то вроде:

Log.i("EnterpriseActivity.java", "Captain's Log, Stardate 43125.8. We have entered a spectacular binary star system in the Kavis Alpha sector on a most critical mission of astrophysical research.");

Затем запускаете приложение и смотрите секцию Android Log на экране, где появится следующая строка:

Считываем данные из View-элементов - 1

Первый аргумент — это название класса, из которого сделана запись в журнал. Второй аргумент — тот текст, который Вы хотите отобразить. Здесь мы использовали Log.i(), то есть лог информационного уровня.

А вообще есть такие варианты:

Они соотносят записи с различными уровнями, которые при запуске приложения можно выбрать здесь:

Считываем данные из View-элементов - 2

Выбранный уровень будет показывать все логи своего и вышестоящих уровней, так что уровень подробностей (verbose) покажет максимум информации, а уровень ошибки (error) покажет только самые важные записи.

Ваша очередь

В следующем тесте Вам опять нужно будет создать новое приложение. Назовите его Menu (Меню) и вставьте в него следующий код:

Если Вы используете Андроид Студио версии 1.4 или выше, при настройке проекта выберите шаблон Empty Activity (пустая активность). Вот так он должен выглядеть, когда загрузится:

Считываем данные из View-элементов - 3

XML-код уже настроен таким образом, чтобы вызывать метод printToLogs при нажатии кнопки Print menu to logs (распечатать меню в журнал). Допишите код этого метода таким образом, чтоб метод считывал данные из TextView каждого пункта меню и выводил его в виде записи в журнал. Если запутаетесь, не расстраивайтесь, на следующей странице будет слайд с примером.

Комментарии (29)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Миша Зефир Уровень 19
23 декабря 2021
Все классно, балуешься, пробуешь, даже не особо сбивает, что курс старый, но вот зачем тут логи, совсем не понял) Есть догадки? И твоя награда!) Одесса. Привоз. Колбасный ряд. — Мужчина! Шо вы ото целый час ходите, пробуете и ничего не берёте?! Вам шо, таки ничего не нравится? — Нравится! — Шо, денег нет?! — Есть! — Ну так покупайте! — Зачем? — Шобы кушать! — А я шо делаю?
Hokkaido Уровень 2
11 мая 2024
Дальше будет по курсу на 9-м уровне: Логи часто используются как временное добавление, это делается для проверки состояния отметки в журнале, корректно ли отображается что-то. Потом они удаляются, когда мы удостоверились что они нам больше не нужны, потому что журнал ограничен по длине. Если в нем будет пачка не нужных сообщений, то могут пропадать важные сообщение про ошибки.
Name Unknown ;) Уровень 2
1 февраля 2021
Тут уже многие накидали ссылок на код и на свои примеры. Пожалуй, соберу тут со всех полезных комментов порядок действий и наблюдения/примечания. 1. Создаём новый проект (на момент 2020 года уже версия API 16). 2. Берём из ссылки код и копируем/вставляем в проект: ссылка. Всё, что в xml пометится красным, просто заменяем на одну строку:

android:layout_margin="16dp"
3. Дальше надо в метод printToLogs набрать то, о чём здесь в лекции говорится (Log.i), а если вдруг не поняли, как делать, вот (приведение (TextView) на самом деле не нужно, но я оставил, чтобы вы увидели, как оно чёрно-серым помечается, что означает неиспользуемость нигде в коде, то же самое касается метода printToLogs, если в xml не прописать printToLogs в качестве метода для onClick в кнопке):

public void printToLogs(View view) {
        // Find first menu item TextView and print the text to the logs
        TextView text1 = (TextView) findViewById(R.id.menu_item_1);
        Log.i("MainActivity.java", (String) text1.getText());  //можно ещё text1.getText().toString() 
        // Find second menu item TextView and print the text to the logs
        TextView text2 = (TextView) findViewById(R.id.menu_item_2);
        Log.i("MainActivity.java", (String) text2.getText());
        // Find third menu item TextView and print the text to the logs
        TextView text3 = (TextView) findViewById(R.id.menu_item_3);
        Log.i("MainActivity.java", (String) text3.getText());
    }
Вы наверное заметили, что там указан MainActivity.java - это, чтобы в логах было видно, откуда строка, ведь в будущем будем сталкиваться уже не с одним классом MainActivity, а с как минимум двумя ;)))
Name Unknown ;) Уровень 2
1 февраля 2021
Из-за лимита по количеству символов продолжу здесь: 6. Запускаем проект, нажимаем в появившемся приложении на кнопку "Print menu to logs" и видим такую картину: Можно заметить, что написано не просто "MainActivity.java: Chocolate lava cake", а "I/MainActivity.java: Chocolate lava cake". Т.е. в начале есть буква "I" - info. В лекции упомянули Log.i(), то есть лог информационного уровня. А ведь может быть Log.e(), Log.d() и так далее. Я правда на данном этапе знаний и нехватки опыта затрудняюсь ответить, зачем это надо, но видимо для проверок, дебагов и прочих экпериментов. Кстати, в вышеприведенном мною скриншоте можно увидеть вкладку Verbose, а кроме неё там есть ещё Debug, Info, Warn и так далее (типа строк, а Verbose - это вообще все типы строк, хотя можно было All сделать), чтобы отсечь ненужные строки в логах при поисках нужных строк нужного типа.
🦔 Виктор Уровень 20 Expert
1 декабря 2020
1. В лекции забыли вставить ссылку на код. 2. В разметке красные размеры внутренних отступов, можно по alt + enter создать их на месте со значением в dp или стереть и захардкодить их руками. 3. В коде метода получаем текстовые представления через метод findViewById. 4. Создаём записи в журнале событий с типом инфо, в роли тэга указываем класс "MainActivity", а значение получаем из текстового представления с помощью геттера getText. 5. Всё получится! p.s.
hidden #2214688 Уровень 22
21 июля 2020
hidden #2214688 Уровень 22
21 июля 2020
По поводу dimen. Создайте ресурсный файл и пропишите. Можете отдать на откуп IDE.
hidden #2214688 Уровень 22
21 июля 2020
Для красоты вывода в лог я бы еще поставил фильтр.
Anatoliy Уровень 10
7 июля 2020
Если оставить параметр тэга пустой " ",то логи не прописываются,так что тэг в любом случае нужен. Приведение к строке (String) или toString() оба работают,дело вкуса.
Vacheslav Yaschuk Уровень 7
22 ноября 2018
public void printMenu(View view) { Button btn = (Button)findViewById(R.id.btn); TextView item1 =(TextView)findViewById(R.id.item1); TextView item2 =(TextView)findViewById(R.id.item2); TextView item3 =(TextView)findViewById(R.id.item3); Log.i("MainActivity",item1.getText().toString()); Log.i("MainActivity",item2.getText().toString()); Log.i("MainActivity",item3.getText().toString()); }
Svetlana Уровень 20
18 сентября 2018
код https://gist.github.com/udacityandroid/042a390d4414f32a5558
Demetria Уровень 22
28 ноября 2020
Спасибо!
Roman Sergeevich Уровень 0
2 сентября 2018
Кода то нету, HELP
Владимир Уровень 7
2 сентября 2020
вы хоть перед тем как коммент писать хоть прочитайте предыдущие...