Страница 1 из 9

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

Добавлено: 01 сен 2011, 03:00
damager82
В этом уроке мы:

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

Click here to read this article!

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

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

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

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

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

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

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

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

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

Добавлено: 01 апр 2012, 16:14
brucemax
Хм.. меняю параметр duration в методе makeText.. а продолжительность показа всё равно около одной секунды. (Тестирую всё на телефоне). В чём причина? Может от устройства зависит.

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

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

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

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

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

Добавлено: 18 апр 2012, 18:32
Adil
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): начинаем

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

Добавлено: 18 апр 2012, 19:11
Adil
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();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 17 июл 2012, 16:25
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() будет смена текста в тосте без его закрытия и постановки в очередь следующего.

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

Добавлено: 17 июл 2012, 17:09
damager82
Ameron писал(а):Теперь при многократном вызове метода show() будет смена текста в тосте без его закрытия и постановки в очередь следующего.
Круто! Я не знал об этом.

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

Добавлено: 17 июл 2012, 21:40
Finch
damager82, можна ввести систему репутации? хочется человеку + за тост поставить =)
а еще 6ы хоть какие-то bb теги в 6ыстром ответе =)

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

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

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

Добавлено: 15 авг 2012, 22:53
makcon
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);
		}
		
	}

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

Добавлено: 15 авг 2012, 23:11
math64
Так код в цитированный Вами код на то и расчитан - чтобы показывался только последний тост. Вам надо так:

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

                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();
                }