Урок 12. Логи и всплывающие сообщения

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 12. Логи и всплывающие сообщения

Сообщение damager82 » 01 сен 2011, 03:00

В этом уроке мы:

- рассмотрим логи приложения и всплывающие сообщения

Click here to read this article!
Последний раз редактировалось damager82 28 апр 2017, 10:27, всего редактировалось 10 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 12. Логи и всплывающие сообщения

Сообщение damager82 » 09 янв 2012, 14:45

у меня почему то вкладка LogCat пустая. вы не подскажите почему?
В All messages есть сообщения? Проверьте, что фильтр верно настроен. Или верно выбран уровень verbose, debug, info...

Если не помогает, то в Eclipse в меню Window > Open Perspective > DDMS.
Слева будет вкладка Devices, там должен отображаться ваш запущенный AVD-эмулятор. Кликните на него мышкой. Это может помочь.

На крайний случай - можно все закрыть и снова открыть.
я перезагрузила комп, AVD-эмулятор появился,LogCat тоже
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
Vlady
Сообщения: 7
Зарегистрирован: 04 мар 2012, 07:41
Контактная информация:

Re: Урок 12. Логи и всплывающие сообщения

Сообщение Vlady » 05 мар 2012, 12:18

А можно ли как-то получить логи (включить логирование) на устройстве.
Например щёлкнуть в настройках приложения Debug и Log.d начнёт писаться в файлик (который можно попросить отправить пользователя).

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 12. Логи и всплывающие сообщения

Сообщение damager82 » 06 мар 2012, 13:52

Vlady писал(а):А можно ли как-то получить логи (включить логирование) на устройстве.
Например щёлкнуть в настройках приложения Debug и Log.d начнёт писаться в файлик (который можно попросить отправить пользователя).
Я как-то пытался что-то накопать на эту тему, ничего не нашел. Было бы действительно интересно узнать, как содержимое лога в файл скинуть.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

brucemax
Сообщения: 117
Зарегистрирован: 01 апр 2012, 16:09
Откуда: Минск
Контактная информация:

Re: Урок 12. Логи и всплывающие сообщения

Сообщение brucemax » 01 апр 2012, 16:14

Хм.. меняю параметр duration в методе makeText.. а продолжительность показа всё равно около одной секунды. (Тестирую всё на телефоне). В чём причина? Может от устройства зависит.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 12. Логи и всплывающие сообщения

Сообщение damager82 » 02 апр 2012, 10:20

brucemax писал(а):Хм.. меняю параметр duration в методе makeText.. а продолжительность показа всё равно около одной секунды. (Тестирую всё на телефоне). В чём причина? Может от устройства зависит.
Ох, пипец! Это провал! Я сам не знаю, с чего я взял, что туда можно миллисекунды передавать.
Пофиксил урок, спасибо большое за указание ошибки!
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

brucemax
Сообщения: 117
Зарегистрирован: 01 апр 2012, 16:09
Откуда: Минск
Контактная информация:

Re: Урок 12. Логи и всплывающие сообщения

Сообщение brucemax » 08 апр 2012, 15:21

damager82 писал(а):
brucemax писал(а):Хм.. меняю параметр duration в методе makeText.. а продолжительность показа всё равно около одной секунды. (Тестирую всё на телефоне). В чём причина? Может от устройства зависит.
Ох, пипец! Это провал! Я сам не знаю, с чего я взял, что туда можно миллисекунды передавать.
Пофиксил урок, спасибо большое за указание ошибки!
Бывает.. :) Да и вообще полезно такие вещи.. в документацию лишний раз лезть заставляет, а это есть хорошо! Вот узнал зато, что чтобы установить время показа надо выполнить setDuration, вот только теперь гадаю где.. ведь это же метод класса Toast, причём не статический, то есть надо создать его экземпляр. Создаю. Выставляю длительность. А что тогда писать в makeText в качестве duration.. ? :?:

Adil
Сообщения: 4
Зарегистрирован: 18 апр 2012, 17:26

Re: Урок 12. Логи и всплывающие сообщения

Сообщение Adil » 18 апр 2012, 18:32

damager82 писал(а):
Vlady писал(а):А можно ли как-то получить логи (включить логирование) на устройстве.
Например щёлкнуть в настройках приложения Debug и Log.d начнёт писаться в файлик (который можно попросить отправить пользователя).
Я как-то пытался что-то накопать на эту тему, ничего не нашел. Было бы действительно интересно узнать, как содержимое лога в файл скинуть.

Это возможно из-за того, что у меня новая версия android плагина для eclipse, но у меня есть кнопка export.
Изображение
Выбираем нужные строки или же все (CRTL+A) и нажимаем на export
Вот что выходит в итоге:
04-18 15:47:18.485: D/myLogs(1240): начинаем
04-18 15:48:54.436: D/myLogs(1350): начинаем
04-18 15:50:49.645: D/myLogs(1386): начинаем
04-18 15:52:21.465: D/myLogs(1421): начинаем

Adil
Сообщения: 4
Зарегистрирован: 18 апр 2012, 17:26

Re: Урок 12. Логи и всплывающие сообщения

Сообщение Adil » 18 апр 2012, 19:11

brucemax писал(а):
damager82 писал(а):
brucemax писал(а):Хм.. меняю параметр duration в методе makeText.. а продолжительность показа всё равно около одной секунды. (Тестирую всё на телефоне). В чём причина? Может от устройства зависит.
Ох, пипец! Это провал! Я сам не знаю, с чего я взял, что туда можно миллисекунды передавать.
Пофиксил урок, спасибо большое за указание ошибки!
Бывает.. :) Да и вообще полезно такие вещи.. в документацию лишний раз лезть заставляет, а это есть хорошо! Вот узнал зато, что чтобы установить время показа надо выполнить setDuration, вот только теперь гадаю где.. ведь это же метод класса Toast, причём не статический, то есть надо создать его экземпляр. Создаю. Выставляю длительность. А что тогда писать в makeText в качестве duration.. ? :?:

Походу тут не получится указывать секунды.. тут или LENGTH_LONG или LENGTH_SHORT, которые принимают значения 1 и 0, это не время в секундах и т.д.
А setDuration можно использовать вот так вот:

Код: Выделить всё

Toast toast= Toast.makeText(this, "Нажата кнопка ОК", Toast.LENGTH_SHORT);
// меняем длительность
toast.setDuration(Toast.LENGTH_LONG);
toast.show();

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 12. Логи и всплывающие сообщения

Сообщение damager82 » 19 апр 2012, 09:37

Adil писал(а):Это возможно из-за того, что у меня новая версия android плагина для eclipse, но у меня есть кнопка export.
Здесь имелось ввиду запись стандартных логов в файл в устройстве. Чтоб потом этот файл можно было с устройства достать и почитать.
А в Eclipse и CTRL+C работает.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Lynnfield
Сообщения: 5
Зарегистрирован: 19 апр 2012, 14:44

Re: Урок 12. Логи и всплывающие сообщения

Сообщение Lynnfield » 04 май 2012, 09:54

Доброе утро господа программисты, не так давно занимаюсь программированием под ОС Android, многие проблемы решаю сам, или с вашей помощью, но появилась проблема, простое решение которой не приходит в голову, может кто-то подскажет. Попробуйте в проекте этого урока несколько раз покликать на кнопки, и вы увидите потрясающий результат: все всплывающие подсказки выстраиваются в очередь и показываются подряд, пока не закончатся, как это решить?

Я попробовал таким способом:

Код: Выделить всё

/* Следующая переменная является полем вашего класса (по-сути: псевдоглобальная переменная). */
private Toast toast;                          // описываем ссылочную переменную, которая будет отвечать за наши тосты

//--------------- Следующий код идет внутри метода вызывающего тост -----------------------
try {
    toast.cancel();                           // пытаемся отменить существующий тост, если таковой имеется
} catch (NullPointerException e) { 
    Log.d(TAG, "тоста нет");                  // логируем тот факт, что мы не осилили отмену
} finally {
    /* При любом исходе создаем новый тост */
    toast = Toast.makeText(this,              // с текущим контекстом,
                       "Нажата кнопка ОК",    // нашим содержанием,
                        Toast.LENGTH_SHORT);  // блекджеком и куртизанками.
    toast.show();                             // покажем тост пользователю
}
Вот как-то так, правда мне кажется, что это колхозно + есть проблема: при многократном нажатии тост тупо перестает отображаться.

Помогите, пожалуйста. =(

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Урок 12. Логи и всплывающие сообщения

Сообщение andev » 04 май 2012, 11:41

Здравствуйте, господин начинающий программист :)
Прежде всего хочу сказать, что то, что вы пытаетесь решать проблемы самостоятельно, крайне похвально и заслуживает уважения.
Теперь по поводу тостов - да, они выводятся друг за другом, т.к. их целью является донести всю информацию до пользователя. Используется (быстрее всего) механизм очереди, т.е. пока отображается текущий тост, все остальные пришедшие ждут окончания его отображения, не перекрывая его и это, фактически, логично и правильно.
Позвольте полюбопытствовать, какую информацию вы выводите с такой частотой или в таком объеме, что предыдущий тост не успевает пропасть, как уже подоспел следующий?

Lynnfield
Сообщения: 5
Зарегистрирован: 19 апр 2012, 14:44

Re: Урок 12. Логи и всплывающие сообщения

Сообщение Lynnfield » 04 май 2012, 12:01

andev писал(а): Здравствуйте, господин начинающий программист :)
Не совсем начинающий, я почти год изучал С/С++ перед тем как перейти на Android, потому чувствую себя достаточно образованным для программиста среднего уровня.
andev писал(а): Прежде всего хочу сказать, что то, что вы пытаетесь решать проблемы самостоятельно, крайне похвально и заслуживает уважения.
Благодарю, правда, зачастую, упираюсь в изобретение велосипедов, но потихоньку исправляюсь. =)
andev писал(а): Используется (быстрее всего) механизм очереди, т.е. пока отображается текущий тост, все остальные пришедшие ждут окончания его отображения, не перекрывая его и это, фактически, логично и правильно.
Это я понимаю и, собственно, пытаюсь избежать.
andev писал(а): Позвольте полюбопытствовать, какую информацию вы выводите с такой частотой или в таком объеме, что предыдущий тост не успевает пропасть, как уже подоспел следующий?
Конечно, такая проблема встречалась в С/С++: "ну пользователь же не такой дурак, чтобы вводить символы в числовое поле?". Тут то же самое, дал другу посмотреть свое приложение, Android немного провис, друг стал лупить по клавише, тосты накапливались и выводились еще достаточно долго, потому и собрался решать эту проблему.

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Урок 12. Логи и всплывающие сообщения

Сообщение andev » 04 май 2012, 12:38

если у вас вся эта ситуация связана с проверкой корректности ввода то вот пара советов
1) если полей несколько, то проверку делайте за раз, по очереди
2) можно делать проверку на событии TextChanged каждого поля, если захотите так, сброшу готовый код, он немного нетривиален, но простой
3) что бы защититься от нетерпеливых пользователей которые не могут дождаться завершения длительной операции используйте AsyncTask и прелоадером перекрывайте UI на время выполнения асинктакска.
Что делать конкретно с тостами к сожалению не подскажу, в данный момент плотно занят своей задачей, скажу лишь, что чаще бывает лучше пересмотреть варианты оповещения о некорректном вводе, чем пытаться приспособить под это дело компонент с другой логикой работы. Как вариант - делаете проверку корректности в каждом поле на событии изменения текста и если значение для данного поля некорректно то, к примеру, заливку текста или рамки красным.

Ameron
Сообщения: 1
Зарегистрирован: 17 июл 2012, 16:08
Контактная информация:

Re: Урок 12. Логи и всплывающие сообщения

Сообщение Ameron » 17 июл 2012, 16:25

Lynnfield писал(а):Доброе утро господа программисты, не так давно занимаюсь программированием под ОС Android, многие проблемы решаю сам, или с вашей помощью, но появилась проблема, простое решение которой не приходит в голову, может кто-то подскажет. Попробуйте в проекте этого урока несколько раз покликать на кнопки, и вы увидите потрясающий результат: все всплывающие подсказки выстраиваются в очередь и показываются подряд, пока не закончатся, как это решить?

........

Помогите, пожалуйста. =(
Я пришел к такому виду:

объявляем наш тост

Код: Выделить всё

	private Toast toast;
В методе onCreate инициализируем наш тост

Код: Выделить всё

	@Override
	public void onCreate(Bundle savedInstanceState) {
	........
        toast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
	........
	}
теперь в необходимом месте мы просто задаем текст и показываем тост

Код: Выделить всё

    	toast.setText("Текст");
    	toast.show();
Теперь при многократном вызове метода show() будет смена текста в тосте без его закрытия и постановки в очередь следующего.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 12. Логи и всплывающие сообщения

Сообщение damager82 » 17 июл 2012, 17:09

Ameron писал(а):Теперь при многократном вызове метода show() будет смена текста в тосте без его закрытия и постановки в очередь следующего.
Круто! Я не знал об этом.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

Re: Урок 12. Логи и всплывающие сообщения

Сообщение Finch » 17 июл 2012, 21:40

damager82, можна ввести систему репутации? хочется человеку + за тост поставить =)
а еще 6ы хоть какие-то bb теги в 6ыстром ответе =)
CEO of a company R.id.team

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 12. Логи и всплывающие сообщения

Сообщение damager82 » 18 июл 2012, 12:07

Finch писал(а):damager82, можна ввести систему репутации? хочется человеку + за тост поставить =)
а еще 6ы хоть какие-то bb теги в 6ыстром ответе =)
Ок. Гляну, чего можно сделать.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

makcon
Сообщения: 5
Зарегистрирован: 15 авг 2012, 21:44

Re: Урок 12. Логи и всплывающие сообщения

Сообщение makcon » 15 авг 2012, 22:53

Ameron писал(а):
Lynnfield писал(а):Доброе утро господа программисты, не так давно занимаюсь программированием под ОС Android, многие проблемы решаю сам, или с вашей помощью, но появилась проблема, простое решение которой не приходит в голову, может кто-то подскажет. Попробуйте в проекте этого урока несколько раз покликать на кнопки, и вы увидите потрясающий результат: все всплывающие подсказки выстраиваются в очередь и показываются подряд, пока не закончатся, как это решить?

........

Помогите, пожалуйста. =(
Я пришел к такому виду:

объявляем наш тост

Код: Выделить всё

	private Toast toast;
В методе onCreate инициализируем наш тост

Код: Выделить всё

	@Override
	public void onCreate(Bundle savedInstanceState) {
	........
        toast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
	........
	}
теперь в необходимом месте мы просто задаем текст и показываем тост

Код: Выделить всё

    	toast.setText("Текст");
    	toast.show();
Теперь при многократном вызове метода show() будет смена текста в тосте без его закрытия и постановки в очередь следующего.
У меня такой вариант не работает. Экспериментировал с валидацией полей формы. Если пользователь не заполнил поле, то должен выводиться тост с сообщением, какое поле он не заполнил. Соответственно, сообщения должны идти по очереди, но выводится только последнее

Код: Выделить всё

        @SuppressLint("NewApi")
	private void register() {
		firstname = (EditText) findViewById(R.id.firstname_edit);
		lastname = (EditText) findViewById(R.id.lastname_edit);
		age = (EditText) findViewById(R.id.age_edit);
		
		String fn = firstname.getText().toString();
		String ln = lastname.getText().toString();
		String a = age.getText().toString();
		
		boolean isReg = true;
		
		toast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
		
		if (fn.isEmpty()) {
			toast.setText("Field Firstname can't be empty");
			toast.show();
			isReg = false;
		}
		if (ln.isEmpty()) {
			toast.setText("Field Lastname can't be empty");
			toast.show();
			isReg = false;
		}
		if (a.isEmpty()) {
			toast.setText("Field Age can't be empty");
			toast.show();
			isReg = false;
		}

		if (isReg) {
			outText = (TextView) findViewById(R.id.out_text);
			String out = getResources().getString(R.string.hello_text);
			outText.setText(String.format(out, fn, ln, a));
			
			countClickButton.setVisibility(View.VISIBLE);
		}
		
	}

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Урок 12. Логи и всплывающие сообщения

Сообщение math64 » 15 авг 2012, 23:11

Так код в цитированный Вами код на то и расчитан - чтобы показывался только последний тост. Вам надо так:

Код: Выделить всё

                boolean isReg = true;
                StringBuilder  sb = new StringBuilder();
                if (fn.isEmpty()) {
                        sb.append("Field Firstname can't be empty\n");
                        isReg = false;
                }
                if (ln.isEmpty()) {
                        sb.append("Field Lastname can't be empty\n");
                        isReg = false;
                }
                if (a.isEmpty()) {
                        sb.append("Field Age can't be empty\n");
                        isReg = false;
                }
                if (isReg) {
                        outText = (TextView) findViewById(R.id.out_text);
                        String out = getResources().getString(R.string.hello_text);
                        outText.setText(String.format(out, fn, ln, a));
                        countClickButton.setVisibility(View.VISIBLE);
                } else {
                        toast.setText(sb.toString());
                        toast.show();
                }

Ответить