Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
#1

Logcat на устройстве - Программирование Android

21.06.2014, 23:57. Просмотров 1550. Ответов 13
Метки нет (Все метки)

Тестирую приложение, парсит сайт. На эмуляторе все проходит хорошо, а на телефоне иногда крашится в момент соединения к сайту.
Как логировать ошибки, чтоб сохранялись в файл для последующего просмотра? Возможно ли это?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2014, 23:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Logcat на устройстве (Программирование Android):

LogCat - Программирование Android
Здравствуйте. Подскажите как правильно читать лог/LogCat и определять где находится ошибка ? Вот у меня возникла ошибка , как...

logcat - Программирование Android
Уважаемые пользователи, подскажите как просмотреть логи в приложении, если даже эмулятор не запускается из-за недостатка оперативной памяти.

Альтернатива LogCat - Программирование Android
Работаю в студии, до этого был эклипс... LogCat использую по полной, но он меня не устраивает (ни в Студии, ни в Эклипсе, ни в...

Ошибки LogCat - Программирование Android
Ребят прошу у вас помощи, все никак не могу разобраться с ошибками, при запуске приложения сразу вылетает Логи LogCat: (буду очень...

Ошибки в logcat - Программирование Android
День добрый! Решил написать простенькое приложение вот с этого примера ...

Вывод LogCat - Программирование Android
Вопрос заключается в следующем: пишу одно приложение, при этом использую опенгл. Логкет выдает некие сообщения: GC_CONCURRENT,GC_EXPLICIT,...

13
angryrobot
Командир зеленых роботов
348 / 285 / 53
Регистрация: 08.10.2013
Сообщений: 564
22.06.2014, 10:23 #2
Цитата Сообщение от Rube Посмотреть сообщение
Как логировать ошибки, чтоб сохранялись в файл для последующего просмотра? Возможно ли это?
Нормальный вариант - сделать отдельное приложение для этого дела. Например так как написано тут. Нужно только немного переделать чтоб лог в файл писался. Можно еще посмотреть в сторону библиотеки acra, сам не юзал но говорят хорошая вещь.
1
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
22.06.2014, 12:43 #3
Лично я убедился что LogCat'у доверять на 100% нельзя! только на этапе отладки.
Пишите свой логер! Это не тяжело... просто вместо Log.i будете писать свою команду, например Logf.i()
А внутри пишите на флешку в файл.
Оригинальный логкэт иногда перестает записывать. Зависает. Передает одну строку дважды с одним битым вариантом (пол строки, а пото полная). Плохо фильтрует. Нельзя несколько фильтров поставить. При достижении миллиона строк (без фильтра) может тупо остановиться...
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
22.06.2014, 12:55  [ТС] #4
Цитата Сообщение от angryrobot Посмотреть сообщение
Нормальный вариант - сделать отдельное приложение для этого дела.
Это по типу программы CatLog? Тогда нет смысла изобретать веосипед. Да и не подходит мне, нужно чтобы пользователи смогли отправлять лог на почту автора программы.
Tester64, а есть примеры как это сделать?
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
22.06.2014, 13:12 #5
Цитата Сообщение от Rube Посмотреть сообщение
а есть примеры как это сделать?
Примеры чего? Запись строки в файл? Это вроде так:
Java
1
2
3
4
5
6
7
8
9
10
        BufferedWriter out;
        try {
            out = new BufferedWriter(new FileWriter(fileName, true));
            out.newLine();
            out.write(mess);
            out.flush();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
А как завернуть это в класс Logf и сделать статической думаю сами разберетесь...

Цитата Сообщение от Rube Посмотреть сообщение
сделать отдельное приложение для этого дела
Это перебор! В крайнем случае сервис скрытой отправки... Но это уже тяжело и вредно для репутации.
Проще сделать кнопку глубоко в настройках или меню - "отправить ошибки автору"
1
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
22.06.2014, 13:58  [ТС] #6
Tester64, нет, я про то, как отловить крах приложения.
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
22.06.2014, 14:05 #7
Цитата Сообщение от Rube Посмотреть сообщение
я про то, как отловить крах приложения
А вот это намного сложнее... я сам до конца не разобрался! Нашел какойто огромный класс, который предлагал отправить на почту и сильно модифицировал его под себя. Оригинал не остался, а в моих художествах не разберетесь - сильная привязка под мои классы.. Но точно можно и точно есть в инете!
Подскажу лишь что для перехвата в КАЖДОЕ активити в онкрейт пришлось добавить строчку:
Java
1
Thread.setDefaultUncaughtExceptionHandler(new МОЙ_КЛАСС_ОТЛОВА(this, "activity №1"));
1
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
22.06.2014, 17:59  [ТС] #8
Tester64, ну будем искать... и на том спасибо.

Добавлено через 2 часа 12 минут
Вот, вроде работает как надо:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Thread.UncaughtExceptionHandler defaultExceptionHandler; // объявление экземпляра класса
 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); 
    defaultExceptionHandler = 
        Thread.getDefaultUncaughtExceptionHandler(); // сохранение обработчика исключений в переменную
    Thread.setDefaultUncaughtExceptionHandler(uncaughtExceptionHandler);
}
 
Thread.UncaughtExceptionHandler uncaughtExceptionHandler = 
    new Thread.UncaughtExceptionHandler() {
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        e.printStackTrace();        
        final Writer result = new StringWriter();
        final PrintWriter printWriter = new PrintWriter(result);
        e.printStackTrace(printWriter);
        String stacktrace = result.toString(); // сохранение ошибки в переменную
        printWriter.close();
        // запись ошибки в файл
        try {
            FileOutputStream fos = openFileOutput("er.txt", MODE_PRIVATE);
            fos.write(stacktrace.getBytes());
            fos.close();            
        } catch (Throwable m) {     
            Toast.makeText(getApplicationContext(),
                    "Exception: " + m.toString(), Toast.LENGTH_LONG).show();
        }   
        // вызов метода uncaughtException() объекта defaultExceptionHandler
        defaultExceptionHandler.uncaughtException(t, e);
    }
};
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
22.06.2014, 23:16 #9
Цитата Сообщение от Rube Посмотреть сообщение
вроде работает как надо
Похоже... У меня немного сложнее для понимания было. Там и отправка на почту, и смс, и в файл и диалог-предупреждение с кнопкой "ok"... убрал лишнее, добавил свое... и забыл!

Судя по коду можно не вызывать старый обработчик? Вы пробовали что получается? Может можно глобально игнорировать ошибки в активити? было бы круто! Нажал кнопку - код дошел до ошибки и тихо прервался. Записал сообщение в файл и дал работать юзеру дальше. А у меня пока глобальное вылетание по любому происходит. Причем иногда только верхнего активити - нижнее глючит после этого...
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
23.06.2014, 07:30  [ТС] #10
Цитата Сообщение от Tester64 Посмотреть сообщение
Судя по коду можно не вызывать старый обработчик? Вы пробовали что получается?
Насчет старого обработчика не понял, я только учусь. А получается - ошибки пишутся в файл в папку files приложения. Ну а программа вылетает.
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
23.06.2014, 07:41  [ТС] #11
А как отправить на почту файл?
не тот файл прикрепил...
0
Вложения
Тип файла: zip 1.zip (23.2 Кб, 6 просмотров)
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
23.06.2014, 11:40 #12
Цитата Сообщение от Rube Посмотреть сообщение
Ну а программа вылетает
У меня тоже... каждую ошибку приходится вручную "оборачивать" в try {}. А хотелось бы глобальный обработчик повесить...

Цитата Сообщение от Rube Посмотреть сообщение
1.zip
Что это? Зашифрованый архив???

Цитата Сообщение от Rube Посмотреть сообщение
А как отправить на почту файл?
Я этим не пользуюсь. Но когда-то проверил... там не прямая отправка, а встраивание в письмо в стандартном почтовике и предложение вручную его отправить... могу поискать код...
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
23.06.2014, 12:17  [ТС] #13
Цитата Сообщение от Tester64 Посмотреть сообщение
Что это? Зашифрованый архив???
Да по ошибке не то прикрепил, а удалить не могу, не обращайте внимания.
По теме, самое главное сделали, нашли как лог сохранять, а остальное прикрутится.
0
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
24.06.2014, 15:41 #14
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
try{ refreshFoldersList();
} catch (Throwable t) { 
String str = "";
          t.printStackTrace();
          
          StackTraceElement[] el = t.getStackTrace();
          str+=t.getMessage()+"\r\n"; 
                   str+=t.getLocalizedMessage()+"\r\n";
          str+=t.toString()+"\r\n"; 
for (int i =      0;i<el.length;i++) str+=el[i].toString()+"\r\n"; 
//перенаправьте в файл
          Toast.makeText(this.getBaseContext(),str, Toast.LENGTH_LONG).show();
          
          }
1
24.06.2014, 15:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2014, 15:41
Привет! Вот еще темы с ответами:

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

Хранить LogCat в файле - Программирование Android
Можно ли записывать в файл LogCat ? т.е. вот например написал прогу , а затем после локальных тестов (вроде бы все норм:) )пустил его...

Не отображаются логи в Logcat - Программирование Android
Ребят подскажите в чем проблема не отображаются логи в LogCat должны отображаться логи методов } // Конец onCreate(Bundle) ...

Ошибка в logcat AndroidStudio - Программирование Android
Здравствуйте! Написал простенькое приложенице в Студии, ошибок вроде нет. Но при запуске эмулятора приложение вылетает. Не могу понять...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru