Урок 12. Логи и всплывающие сообщения
Урок 12. Логи и всплывающие сообщения
В этом уроке мы:
- рассмотрим логи приложения и всплывающие сообщения
Click here to read this article!
- рассмотрим логи приложения и всплывающие сообщения
Click here to read this article!
Последний раз редактировалось damager82 28 апр 2017, 10:27, всего редактировалось 10 раз.
Re: Урок 12. Логи и всплывающие сообщения
В All messages есть сообщения? Проверьте, что фильтр верно настроен. Или верно выбран уровень verbose, debug, info...у меня почему то вкладка LogCat пустая. вы не подскажите почему?
Если не помогает, то в Eclipse в меню Window > Open Perspective > DDMS.
Слева будет вкладка Devices, там должен отображаться ваш запущенный AVD-эмулятор. Кликните на него мышкой. Это может помочь.
На крайний случай - можно все закрыть и снова открыть.
я перезагрузила комп, AVD-эмулятор появился,LogCat тоже
Re: Урок 12. Логи и всплывающие сообщения
А можно ли как-то получить логи (включить логирование) на устройстве.
Например щёлкнуть в настройках приложения Debug и Log.d начнёт писаться в файлик (который можно попросить отправить пользователя).
Например щёлкнуть в настройках приложения Debug и Log.d начнёт писаться в файлик (который можно попросить отправить пользователя).
Re: Урок 12. Логи и всплывающие сообщения
Я как-то пытался что-то накопать на эту тему, ничего не нашел. Было бы действительно интересно узнать, как содержимое лога в файл скинуть.Vlady писал(а):А можно ли как-то получить логи (включить логирование) на устройстве.
Например щёлкнуть в настройках приложения Debug и Log.d начнёт писаться в файлик (который можно попросить отправить пользователя).
Re: Урок 12. Логи и всплывающие сообщения
Хм.. меняю параметр duration в методе makeText.. а продолжительность показа всё равно около одной секунды. (Тестирую всё на телефоне). В чём причина? Может от устройства зависит.
Re: Урок 12. Логи и всплывающие сообщения
Ох, пипец! Это провал! Я сам не знаю, с чего я взял, что туда можно миллисекунды передавать.brucemax писал(а):Хм.. меняю параметр duration в методе makeText.. а продолжительность показа всё равно около одной секунды. (Тестирую всё на телефоне). В чём причина? Может от устройства зависит.
Пофиксил урок, спасибо большое за указание ошибки!
Re: Урок 12. Логи и всплывающие сообщения
Бывает..damager82 писал(а):Ох, пипец! Это провал! Я сам не знаю, с чего я взял, что туда можно миллисекунды передавать.brucemax писал(а):Хм.. меняю параметр duration в методе makeText.. а продолжительность показа всё равно около одной секунды. (Тестирую всё на телефоне). В чём причина? Может от устройства зависит.
Пофиксил урок, спасибо большое за указание ошибки!


Re: Урок 12. Логи и всплывающие сообщения
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. Логи и всплывающие сообщения
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. Логи и всплывающие сообщения
Здесь имелось ввиду запись стандартных логов в файл в устройстве. Чтоб потом этот файл можно было с устройства достать и почитать.Adil писал(а):Это возможно из-за того, что у меня новая версия android плагина для eclipse, но у меня есть кнопка export.
А в Eclipse и CTRL+C работает.
Re: Урок 12. Логи и всплывающие сообщения
Доброе утро господа программисты, не так давно занимаюсь программированием под ОС 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. Логи и всплывающие сообщения
Здравствуйте, господин начинающий программист 
Прежде всего хочу сказать, что то, что вы пытаетесь решать проблемы самостоятельно, крайне похвально и заслуживает уважения.
Теперь по поводу тостов - да, они выводятся друг за другом, т.к. их целью является донести всю информацию до пользователя. Используется (быстрее всего) механизм очереди, т.е. пока отображается текущий тост, все остальные пришедшие ждут окончания его отображения, не перекрывая его и это, фактически, логично и правильно.
Позвольте полюбопытствовать, какую информацию вы выводите с такой частотой или в таком объеме, что предыдущий тост не успевает пропасть, как уже подоспел следующий?

Прежде всего хочу сказать, что то, что вы пытаетесь решать проблемы самостоятельно, крайне похвально и заслуживает уважения.
Теперь по поводу тостов - да, они выводятся друг за другом, т.к. их целью является донести всю информацию до пользователя. Используется (быстрее всего) механизм очереди, т.е. пока отображается текущий тост, все остальные пришедшие ждут окончания его отображения, не перекрывая его и это, фактически, логично и правильно.
Позвольте полюбопытствовать, какую информацию вы выводите с такой частотой или в таком объеме, что предыдущий тост не успевает пропасть, как уже подоспел следующий?
Re: Урок 12. Логи и всплывающие сообщения
Не совсем начинающий, я почти год изучал С/С++ перед тем как перейти на Android, потому чувствую себя достаточно образованным для программиста среднего уровня.andev писал(а): Здравствуйте, господин начинающий программист![]()
Благодарю, правда, зачастую, упираюсь в изобретение велосипедов, но потихоньку исправляюсь. =)andev писал(а): Прежде всего хочу сказать, что то, что вы пытаетесь решать проблемы самостоятельно, крайне похвально и заслуживает уважения.
Это я понимаю и, собственно, пытаюсь избежать.andev писал(а): Используется (быстрее всего) механизм очереди, т.е. пока отображается текущий тост, все остальные пришедшие ждут окончания его отображения, не перекрывая его и это, фактически, логично и правильно.
Конечно, такая проблема встречалась в С/С++: "ну пользователь же не такой дурак, чтобы вводить символы в числовое поле?". Тут то же самое, дал другу посмотреть свое приложение, Android немного провис, друг стал лупить по клавише, тосты накапливались и выводились еще достаточно долго, потому и собрался решать эту проблему.andev писал(а): Позвольте полюбопытствовать, какую информацию вы выводите с такой частотой или в таком объеме, что предыдущий тост не успевает пропасть, как уже подоспел следующий?
Re: Урок 12. Логи и всплывающие сообщения
если у вас вся эта ситуация связана с проверкой корректности ввода то вот пара советов
1) если полей несколько, то проверку делайте за раз, по очереди
2) можно делать проверку на событии TextChanged каждого поля, если захотите так, сброшу готовый код, он немного нетривиален, но простой
3) что бы защититься от нетерпеливых пользователей которые не могут дождаться завершения длительной операции используйте AsyncTask и прелоадером перекрывайте UI на время выполнения асинктакска.
Что делать конкретно с тостами к сожалению не подскажу, в данный момент плотно занят своей задачей, скажу лишь, что чаще бывает лучше пересмотреть варианты оповещения о некорректном вводе, чем пытаться приспособить под это дело компонент с другой логикой работы. Как вариант - делаете проверку корректности в каждом поле на событии изменения текста и если значение для данного поля некорректно то, к примеру, заливку текста или рамки красным.
1) если полей несколько, то проверку делайте за раз, по очереди
2) можно делать проверку на событии TextChanged каждого поля, если захотите так, сброшу готовый код, он немного нетривиален, но простой
3) что бы защититься от нетерпеливых пользователей которые не могут дождаться завершения длительной операции используйте AsyncTask и прелоадером перекрывайте UI на время выполнения асинктакска.
Что делать конкретно с тостами к сожалению не подскажу, в данный момент плотно занят своей задачей, скажу лишь, что чаще бывает лучше пересмотреть варианты оповещения о некорректном вводе, чем пытаться приспособить под это дело компонент с другой логикой работы. Как вариант - делаете проверку корректности в каждом поле на событии изменения текста и если значение для данного поля некорректно то, к примеру, заливку текста или рамки красным.
Re: Урок 12. Логи и всплывающие сообщения
Я пришел к такому виду:Lynnfield писал(а):Доброе утро господа программисты, не так давно занимаюсь программированием под ОС Android, многие проблемы решаю сам, или с вашей помощью, но появилась проблема, простое решение которой не приходит в голову, может кто-то подскажет. Попробуйте в проекте этого урока несколько раз покликать на кнопки, и вы увидите потрясающий результат: все всплывающие подсказки выстраиваются в очередь и показываются подряд, пока не закончатся, как это решить?
........
Помогите, пожалуйста. =(
объявляем наш тост
Код: Выделить всё
private Toast toast;
Код: Выделить всё
@Override
public void onCreate(Bundle savedInstanceState) {
........
toast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
........
}
Код: Выделить всё
toast.setText("Текст");
toast.show();
Re: Урок 12. Логи и всплывающие сообщения
Круто! Я не знал об этом.Ameron писал(а):Теперь при многократном вызове метода show() будет смена текста в тосте без его закрытия и постановки в очередь следующего.
Re: Урок 12. Логи и всплывающие сообщения
damager82, можна ввести систему репутации? хочется человеку + за тост поставить =)
а еще 6ы хоть какие-то bb теги в 6ыстром ответе =)
а еще 6ы хоть какие-то bb теги в 6ыстром ответе =)
CEO of a company R.id.team
Re: Урок 12. Логи и всплывающие сообщения
Ок. Гляну, чего можно сделать.Finch писал(а):damager82, можна ввести систему репутации? хочется человеку + за тост поставить =)
а еще 6ы хоть какие-то bb теги в 6ыстром ответе =)
Re: Урок 12. Логи и всплывающие сообщения
У меня такой вариант не работает. Экспериментировал с валидацией полей формы. Если пользователь не заполнил поле, то должен выводиться тост с сообщением, какое поле он не заполнил. Соответственно, сообщения должны идти по очереди, но выводится только последнееAmeron писал(а):Я пришел к такому виду:Lynnfield писал(а):Доброе утро господа программисты, не так давно занимаюсь программированием под ОС Android, многие проблемы решаю сам, или с вашей помощью, но появилась проблема, простое решение которой не приходит в голову, может кто-то подскажет. Попробуйте в проекте этого урока несколько раз покликать на кнопки, и вы увидите потрясающий результат: все всплывающие подсказки выстраиваются в очередь и показываются подряд, пока не закончатся, как это решить?
........
Помогите, пожалуйста. =(
объявляем наш тостВ методе onCreate инициализируем наш тостКод: Выделить всё
private Toast toast;
теперь в необходимом месте мы просто задаем текст и показываем тостКод: Выделить всё
@Override public void onCreate(Bundle savedInstanceState) { ........ toast = Toast.makeText(this, "", Toast.LENGTH_SHORT); ........ }
Теперь при многократном вызове метода show() будет смена текста в тосте без его закрытия и постановки в очередь следующего.Код: Выделить всё
toast.setText("Текст"); toast.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. Логи и всплывающие сообщения
Так код в цитированный Вами код на то и расчитан - чтобы показывался только последний тост. Вам надо так:
Код: Выделить всё
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();
}