Постановка задачи: Механизм обработки ошибок. Создания класса, который позволял бы откладывать обработку ошибок "на потом". То есть вместо вызова 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 -
*/ publicclassErrorHandler {-
publicstaticfinal String LOG_FILE_NAME ="log.txt"; -
publicvoiderror(Exception e) { -
addToLog(e); -
trySendToGoogleAnalytic(e); -
trySendToEmail(e); -
if(isPrinterError(e) || isNetworkDisable(e)) { -
sendBroadcastShowedPrinterError(); -
} -
} -
privatevoidaddToLog(Exception exception) { -
try{ -
Log.e("Xplat","error:", exception); -
saveExceptionMessageToFile(exception); -
}catch(Exception e) { -
e.printStackTrace(); -
} -
} -
privatevoidsaveExceptionMessageToFile(Exception exception) { -
try{ -
File file =newFile(MyApplication.instance.getExternalCacheDir(), LOG_FILE_NAME); -
OutputStream fo =newFileOutputStream(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(); -
} -
} -
privateString buildExceptionMessage(Exception exception) { -
StringWriter stackTrace =newStringWriter(); -
exception.printStackTrace(newPrintWriter(stackTrace)); -
returnstackTrace.toString(); -
} -
privatevoidtrySendToGoogleAnalytic(Exception e) { -
} -
privatevoidtrySendToEmail(Exception e) { -
} -
privateboolean isPrinterError(Exception e) { -
returntrue; -
} -
privateboolean isNetworkDisable(Exception e) { -
returntrue; -
} -
privatevoidsendBroadcastShowedPrinterError() { -
} }

Комментариев нет:
Отправить комментарий