Android Question JRDC2 dbcommand error

josejad

Expert
Licensed User
Longtime User
Hi all:

I have a working app with the login logic in the Main activity, working fine.
Now, I want to move the non ui related code to services (mainly the db code and a part where I have to read images from the phone to show them in a Listview)

When I move the code to a service and call it with CallDelayedSub I got the error:

B4X:
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
<title>Error 500 </title>
</head>
<body>
<h2>HTTP ERROR: 500</h2>
<p>Problem accessing /rdc. Reason:
<pre>    java.lang.ClassNotFoundException: b4j.example.db$_dbcommand</pre></p>
<hr /><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.3.z-SNAPSHOT</a><hr/>
</body>
</html>

I've found this problem in a similar thread, but I got DBResults and DBCommand types in my code.
https://www.b4x.com/android/forum/threads/jrdc2-dbcommand-error.78208/

Activity:
B4X:
Sub BtLogin_Click
    If ETUsuario.Text = "" Then
        ToastMessageShow("Debe introducir un usuario", False)
    Else If    ETPassword.Text = "" Then
        ToastMessageShow("Debe introducir una contraseña", False)
    Else
        ProgressDialogShow("Comprobando credenciales...")
        CallSubDelayed3("DB", "Login", ETUsuario.Text, ETPassword.Text)
    End If
End Sub

Service DB:
B4X:
#Region  Service Attributes
    #StartAtBoot: False
  
#End Region

Sub Process_Globals
    Dim reqManager As DBRequestManager
    Type DBResult (Tag As Object, Columns As Map, Rows As List)
    Type DBCommand (Name As String, Parameters() As Object)
End Sub

Sub Service_Create
    reqManager.Initialize(Me, "http://semisevilla.synology.me:8090/rdc")
End Sub

Sub Service_Start (StartingIntent As Intent)
    Service.StopAutomaticForeground 'Call this when the background task completes (if there is one)
End Sub

Sub Service_Destroy

End Sub

Sub Login (usuario As String, password As String)
    Dim cmd As DBCommand
    cmd.Initialize
    cmd.Parameters = Array As Object(usuario, password)
    cmd.Name = "login"
    reqManager.ExecuteQuery(cmd, 0, Null)
End Sub

Sub JobDone(Job As HttpJob)
    If Job.Success = False Then
        Log("Error: " & Job.ErrorMessage)
        ProgressDialogHide
        ToastMessageShow("Ha ocurrido un error: " & Job.ErrorMessage, True)
    Else
        If Job.JobName = "DBRequest" Then
            reqManager.HandleJobAsync(Job, "ReqManager")
        End If
    End If
    Job.Release
End Sub

Sub ReqManager_Result(result As DBResult)
    Dim Record() As Object
    ProgressDialogHide
    If result.Rows.Size > 0 Then
        Record = result.Rows.Get(0)
        ToastMessageShow( Record(result.Columns.Get("id_empresa")) , False )
        'Starter.kvs.Put("id_empresa", Record(result.Columns.Get("id_empresa")))
'        CargarSites
    Else
        ToastMessageShow("Usuario o contraseña no válidos" , False )
    End If
End Sub

Thanks in advance
 

DonManfred

Expert
Licensed User
Longtime User
As far as i know the Custom Types must be declared in the Main Activity.
 
Upvote 0

josejad

Expert
Licensed User
Longtime User
Thanks DonManfred.. that was the problem :confused:

I have some doubts about services, when to use them, callsubdelayed and service.start diferences... I will keep testing and I'll make some question about that when I see some things more clear.

Thanks again¡¡
 
Upvote 0
Top