Постановка задачи: Механизм обработки ошибок. Создания класса, который позволял бы откладывать обработку ошибок "на потом". То есть вместо вызова e.printStackTrace() в блоке catch я вызываю свой метод и забываю об ошибке.
Данная задача часто возникает как следствие возникновения ошибок при призентации приложения заказчику. В этом случае выгодно чтобы приложение 1) перехватывало все ошибки не падая с ошибкой и сбрасывало сообщение куда-то, для того чтобы разработчику было легше понять что именно свалилось.
2) нужно обрабатывать все ошибки для того чтобы быстрее понять причину возникновения ошибок в приложении, если они возникнут.
Втроую задачу решает приведённый ниже класс. Он записывает в файл последнюю ошибку. При его использовании нужно не забыть включить в манифест разрешение о записи файлов на SD карту а также эмулировать саму SD карту в эмуляторе, если Вы тестируете на эмуляторе.
Для того чтобы решить первую проблему нужно перехватывать непредвиденные ошибке, которые не обязаны перехватываться блоком try catch, например NullPointException.
О том как это делается я расскажу в следующей статье.
Текст класса ErrorHandler:
Данная задача часто возникает как следствие возникновения ошибок при призентации приложения заказчику. В этом случае выгодно чтобы приложение 1) перехватывало все ошибки не падая с ошибкой и сбрасывало сообщение куда-то, для того чтобы разработчику было легше понять что именно свалилось.
2) нужно обрабатывать все ошибки для того чтобы быстрее понять причину возникновения ошибок в приложении, если они возникнут.
Втроую задачу решает приведённый ниже класс. Он записывает в файл последнюю ошибку. При его использовании нужно не забыть включить в манифест разрешение о записи файлов на SD карту а также эмулировать саму SD карту в эмуляторе, если Вы тестируете на эмуляторе.
Для того чтобы решить первую проблему нужно перехватывать непредвиденные ошибке, которые не обязаны перехватываться блоком try catch, например NullPointException.
О том как это делается я расскажу в следующей статье.
Текст класса ErrorHandler:
package com.example;
import android.util.Log;
import android.widget.Toast;
import java.io.*;
import java.nio.charset.Charset;
/**
-
* User: maksym.levitskiy
-
* Date: 11.02.13
-
*/
public
class
ErrorHandler {
-
public
static
final String LOG_FILE_NAME =
"log.txt"
;
-
public
void
error(Exception e) {
-
addToLog(e);
-
trySendToGoogleAnalytic(e);
-
trySendToEmail(e);
-
if
(isPrinterError(e) || isNetworkDisable(e)) {
-
sendBroadcastShowedPrinterError();
-
}
-
}
-
private
void
addToLog(Exception exception) {
-
try
{
-
Log.e(
"Xplat"
,
"error:"
, exception);
-
saveExceptionMessageToFile(exception);
-
}
catch
(Exception e) {
-
e.printStackTrace();
-
}
-
}
-
private
void
saveExceptionMessageToFile(Exception exception) {
-
try
{
-
File file =
new
File(MyApplication.instance.getExternalCacheDir(), LOG_FILE_NAME);
-
OutputStream fo =
new
FileOutputStream(file);
-
String str = buildExceptionMessage(exception);
-
fo.write(str.getBytes(Charset.forName(
"UTF-8"
)));
-
}
catch
(NullPointerException ex) {
-
Toast.makeText(MyApplication.instance,
"Нету SD карты"
, Toast.LENGTH_SHORT).show();
-
}
catch
(Exception e) {
-
e.printStackTrace();
-
}
-
}
-
private
String buildExceptionMessage(Exception exception) {
-
StringWriter stackTrace =
new
StringWriter();
-
exception.printStackTrace(
new
PrintWriter(stackTrace));
-
return
stackTrace.toString();
-
}
-
private
void
trySendToGoogleAnalytic(Exception e) {
-
}
-
private
void
trySendToEmail(Exception e) {
-
}
-
private
boolean isPrinterError(Exception e) {
-
return
true
;
-
}
-
private
boolean isNetworkDisable(Exception e) {
-
return
true
;
-
}
-
private
void
sendBroadcastShowedPrinterError() {
-
}
}
Комментариев нет:
Отправить комментарий