B4A=true Group=Default Group ModulesStructureVersion=1 Type=Activity Version=10.2 @EndOfDesignText@ #Region Activity Attributes #FullScreen: False #IncludeTitle: True #End Region '****************************************************************************** 'Este modulo intercepta los errores de la aplicación mediante "Starter.Application_Error" y muestra una pantalla 'con el log del error y lo manda al servidor con un query de DBRequestManager, se necesita que exista el query 'en el "config.properties" llamado "guardaErrores" y que tenga el siguiente texto: ' 'sql.guardaErrores=INSERT INTO KELLOGGS.PUSH_INFO (ID, RUTA, FECHA, DATOS) VALUES((?),(?),(?),(?)) ' 'Agregar estas lineas a "Starter.Process_Globals" ' 'Para los Logs ' Dim logs As StringBuilder ' Private logcat As LogCat ' 'Agregar estas lineas a "Starter.Service_Create" ' 'Para los Logs ' #if RELEASE ' logcat.LogCatStart(Array As String("-v","raw","*:F","B4A:v"), "logcat") ' #end if ' logs.Initialize ' 'Agregar este Sub a "Starter" ' 'Return true to allow the OS default exceptions handler to handle the uncaught exception. 'Para los Logs 'Sub Application_Error (Error As Exception, StackTrace As String) As Boolean ' 'wait for 500ms to allow the logs to be updated. ' Dim jo As JavaObject ' Dim l As Long = 500: jo.InitializeStatic("java.lang.Thread").RunMethod("sleep", Array(l)) 'Sleep 500ms ' logcat.LogCatStop ' logs.Append(StackTrace) ' Subs.revisaBD ' Subs.errorLog.ExecNonQuery2("INSERT INTO errores(fecha, error) VALUES (?,?)", Array As Object (Subs.fechaKMT(DateTime.now), logs)) ' StartActivity(errorManager) ' Return True 'End Sub '****************************************************************************** Sub Process_Globals 'These global variables will be declared once when the application starts. 'These variables can be accessed from all modules. End Sub Sub Globals 'These global variables will be redeclared each time the activity is created. 'These variables can only be accessed from this module. ' Dim errorLog As SQL Dim c As Cursor Private p_principal As Panel Private l_titulo As Label Private svScroll As ScrollView Private etText As EditText Private c_continuar As Button Private p_botones As Panel Private b_salir As Button End Sub Sub Activity_Create(FirstTime As Boolean) 'Do not forget to load the layout file created with the visual designer. For example: Activity.LoadLayout("errorManager") End Sub Sub Activity_Resume Dim elError As String = "" Dim laFecha As String = "" ' svScroll.Initialize(500dip) ' Activity.AddView(svScroll, 0, 300, 100%x, 80%y) p_principal.Height = Activity.Height p_principal.Width = Activity.Width svScroll.Width = Round(p_principal.Width * 0.9) svScroll.Left = Round(p_principal.Width/2)-Round(svScroll.Width/2) p_botones.Left = Round(p_principal.Width/2)-Round(p_botones.Width/2) p_botones.Top = Activity.Height - (p_botones.Height + 80) etText.Initialize("") svScroll.Panel.AddView(etText, 0, 0, 90%x, 80%y) etText.InputType = etText.INPUT_TYPE_NONE etText.Gravity = Gravity.TOP etText.SingleLine = False etText.Wrap = False ' Dim lblText, edtText As StringBuilder Dim lbl As Label lbl.Initialize("") Activity.AddView(lbl, 0, 300, 100%x, 100%y) 'ignore etText.Text = "" Subs.revisaBD c = Subs.errorLog.ExecQuery("select * from errores order by fecha desc limit 1") If c.RowCount > 0 Then c.Position = 0 elError = c.GetString("error") laFecha = c.GetString("fecha") etText.Text = elError End If c.Close Dim usuario As String = "" c = Starter.skmt.ExecQuery("select usuario from usuarioa") If c.RowCount > 0 Then c.Position = 0 usuario = c.GetString("USUARIO") End If ' Log("++++++" & Starter.logsStr) ' etText.Text = etText.Text & Starter.logsStr ' lbl.TextSize = etText.TextSize ' lbl.Text = etText.Text ' Dim su As StringUtils ' Dim edheight As Int = su.MeasureMultilineTextHeight(lbl, lbl.Text) ' lbl.RemoveView ' etText.Height = edheight ' svScroll.Panel.Height = edheight svScroll.Height = Round(Activity.Height * 0.9) ' Log(edheight) Dim cmd As DBCommand cmd.Initialize cmd.Name = "guardaErrores" cmd.Parameters = Array As Object(laFecha, usuario&"|"&Starter.rutaV, laFecha, elError) Log($"Mandamos: ${Subs.fechaKMT(DateTime.Now)}, |${usuario}|, ${Subs.fechaKMT(DateTime.Now)}"$) Starter.reqManager.ExecuteCommand(cmd,"guardaErrores") End Sub Sub Activity_Pause (UserClosed As Boolean) End Sub Sub JobDone(Job As HttpJob) If Job.Success = False Then ToastMessageShow("Error: " & Job.ErrorMessage, True) Else LogColor("JobDone: '" & Starter.reqManager.HandleJob(Job).tag & "' - Registros: " & Starter.reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211110 If Job.JobName = "DBRequest" Then Dim result As DBResult = Starter.reqManager.HandleJob(Job) If result.Tag = "guardaErrores" Then 'query tag For Each records() As Object In result.Rows For Each k As String In result.Columns.Keys Log("GuardaErrores: " & k & ": " & records(result.Columns.Get(k))) Next Next End If End If End If Job.Release End Sub Private Sub c_continuar_Click Subs.iniciaActividad("Principal") ' B4XPages.ShowPage("Principal") End Sub Private Sub b_salir_Click cierraActividades End Sub Sub cierraActividades Log("closing activities") Dim jo As JavaObject jo.InitializeContext jo.RunMethod("finishAffinity", Null) End Sub