Spanish ¿ Como capturo un error de conexión (falta de) con jRDC2 ?

Sergio Castellari

Active Member
Licensed User
Hola Gente,

Estoy desarrollando una APP que utiliza un servidor jRDC2.
Haciendo pruebas veo que si el servidor jRDC2 esta apagado, la APP inicia normalmente y al momento de conectar simplemente de un error y se sale.
¿Como deberia capturar esta falta de servidor?

¿¿¿ Se utiliza algo similar a Try-Catch ??? nosé como implementarlo.

Saludos,
Sergio
 

josejad

Expert
Licensed User
Longtime User
Hola Sergio:

¿Recuerdas que el otro hilo te comentaba que lo normal es que con jRDC2, desde la clase devolvieras el ResultSet, pero que yo la había adaptado?
Ahora ya sabes por qué, jeje... Mira, fíjate que yo devuelvo un mapa en vez de un resultset. En el mapa meto varias cosas (entre ellas el resultset), pero meto también si la conexión ha sido exitosa o no. Fíjate en la línea: Respuesta.Put("Correcto", j.Success)

B4X:
Public Sub GetRecord (Command As String, parameters() As String) As ResumableSub
    Dim Respuesta As Map
    Respuesta.Initialize
    Dim req As DBRequestManager = CreateRequest
    Dim cmd As DBCommand = CreateCommand(Command, parameters)
    Wait For (req.ExecuteQuery(cmd, 0, Null)) JobDone(j As HttpJob)
    Respuesta.Put("Correcto", j.Success)
    If j.Success Then
        req.HandleJobAsync(j, "req")
        Wait For (req) req_Result(Res As DBResult)
        'work with result
        req.PrintTable(Res)
        Respuesta.Put("Mensaje","Se han leído correctamente los datos")
    Else
        Log("ERROR: " & j.ErrorMessage)
        Respuesta.Put("Mensaje","No han leído correctamente los datos, inténtelo más tarde. Error: " & j.ErrorMessage)
    End If
    j.Release
    Respuesta.Put("Datos",Res)
    'req.PrintTable(Res)
    Return Respuesta
End Sub

Así, cuando uso un objeto de la clase desde cualquier sitio, puedo hacer el If Respuesta.Get("Correcto") ya que ahí vendrá TRUE si fue correcta, y FALSE si no.
B4X:
Dim jrdc As jRDC2
    jrdc.Initialize
    Wait For(jrdc.GetRecord("selectPermisosApp", Array As String(email))) Complete (Respuesta As Map)
    If Respuesta.Get("Correcto") Then
        rs = Respuesta.Get("Datos")
        Dim resultado As String
        For Each row() As Object In rs.Rows
            resultado = row(0)
        Next
    
    Else
        ToastMessageShow("Ha ocurrido un error al obtener los permisos", True)
    End If
 
Last edited:

Sergio Castellari

Active Member
Licensed User
Hola José!

Mierda!!! Esto es muy interesante!!!! Llevo varios minutos mirando tu logica!! (si si recordaba eso...y me intrigaba! je)

Tengo varias dudas:

1) ¿Como funciona realmente un MAP?...porque segun entiendo de tu código...estas mezclando valores booleanos, textos y con un dbresult (datos) !!! ... todo dentro del MAP
2) ¿Es complejo transformar el DBResult a un MAP? me refiero consume muchos recursos extras?
3) En la propiedad PUT del MAP, le metes cualquier cosa! jeje
4) MIL GRACIAS por tus ayudas...SOS muy buen profesor, por que me vas llevando a que "comprenda" la logica de B4A

Saludos!
 

josejad

Expert
Licensed User
Longtime User
Hola Sergio:

1) Es una especie de lista pero en la que en vez de meter elementos de uno en uno, los metes por pares (lo que se llama un diccionario o una lista clave->valor.
Por ejemplo: (1->"tomate", 2->"fresa", ...), donde 1 sería la clave, y tomate el valor. Pero también puede ser: (listaColores->(azul, rojo, amarillo, ...), usuario->"pepito", )...
Es decir, el valor puede ser cualquier cosa (de las admitidas por el map), como una lista, un booleano, una imagen..
Echa un ojo a la documentación:

2) No transformas nada, añades como clave lo que quieras (en este caso yo como claves he usado "Datos" y como valor, el resulset
3) Sí, prácticamente cualquier cosa como te he comentado: listas, imágenes, variables, ...
4) No hay de qué, para eso estamos. De hecho, yo voy aprendiendo a la vez, porque hay cosas que miro para contestar, jeje.

saludos,
 

Sergio Castellari

Active Member
Licensed User
José,

Ahora voy entendiendo más el tema de los MAP (que ya había visto su uso, pero no comprendido totalmente). Es muy versátil por lo que voy viendo.
Te comento, que ya implemente tu método con map...y me gustó el tratamiento!!! jejeje

Ahora me voy a tomar unos minutos para "leer" lo que me pasaste de Map Collection

Ya logré loguearme y grabar bien los datos en la tabla de auditoria e incluso también la salida de la APP...(incluso LEO el ID del telefono!!!!!)....y todo ello, controlando los posibles errores, con mensajes al usuario y empece a ver un segundo activity (donde estaria el menu principal del sistema)!!!

Vos vas aprendiendo??? cuanta humildad!

De todas formas, espero en un tiempo tambien poder "ayudar/colaborar" en las consultas...

Saludos,

PD: Ahora me voy a meter con los menues (estuve mirando por arriba a B4XDrawer) ¿Seria el apropiado para un menu lateral? ¿Permite subniveles de opciones? [Ya se que me vas decir que comience un nuevo hilo...pero el nuevo hilo lo quiero comenzar con un poco mas de conocimiento y no hacer preguntas tontas]
:)
 

josejad

Expert
Licensed User
Longtime User
Perfecto, me alegro de que vaya marchando tu app y vayas aprendiendo cosas por el camino.

B4XDrawer es perfecto para un menú lateral. El "drawer" es sólo el panel lateral, dentro puedes poner lo que quieras, por ejemplo un xCustomListView, o un CLVExpandable para hacer los submenús dentro.

O puedes hacerlo con algún otro:

saludos,
 
Top