Android Question CallSub

I'm having trouble calling the Initialize method of a B4A class passed as an object. I keep getting the "method not found" message.


Private Sub CreateInstance(TypeName As String, Params() As Object) As Object
Dim jo As JavaObject
Return jo.InitializeNewInstance(TypeName,Params).As(Object)
End Sub
....
Dim tp=GetType(baseOBJ)
Dim nuovoObj As Object = CreateInstance(tp,Null)
Log("GetType(oItem): " & GetType(nuovoObj))
If SubExists(nuovoObj, "Initialize") Then
CallSub(nuovoObj, "Initialize")
Else
Log("Metodo Initialize not found")
End If
 

Cableguy

Expert
Licensed User
Longtime User
without any code, I don't see how anyone can help.

But anyway, here's how it is usually done:

Dim myNewClassObject as ClassObject
myNewClassObject.initialize
 
Upvote 0
This is the class code.
I would like to use

Dim nuovaCassaO As tCassa
nuovaCassaO.Initialize
...
Dim baseOBJ as Object=nuovaCassaO

Dim tp=GetType(baseOBJ)
Dim nuovoObj As Object = CreateInstance(tp,Null)
CallSub(nuovoObj, "InitializeORM") <===== nothing happens here

'tCassa class
Sub Class_Globals
Public db_orm_fields() As String '= Array As String("idCassa", "Nome", "Int1","Int2","Int3","Logo")
Public db_orm_pks() As String '= Array As String("idCassa")
Public db_orm_tabname As String'="tCassa"
Public idCassa As Int
Public Nome As String
Public Int1 As String
Public Int2 As String
Public Int3 As String
Public Logo As String

End Sub
Public Sub InitializeORM()
db_orm_fields = Array As String("idCassa", "Nome", "Int1","Int2","Int3","Logo")
db_orm_pks= Array As String("idCassa")
db_orm_tabname ="tCassa"
End Sub
Public Sub Initialize()
InitializeORM
End Sub
 
Upvote 0

DonManfred

Expert
Licensed User
Longtime User
Please use [CODE]code here...[/CODE] tags when posting code.

codetag001.png

codetag002.png

codetag003.png
 
Upvote 0

Sagenut

Expert
Licensed User
Longtime User
Something like this?
B4X:
Dim nuovoObj As tCassa = CreateInstance(Null)
nuovoObj.InitializeORM

Private Sub CreateInstance(Params() As Object) As tCassa
    Dim defaultCassa As tCassa
    defaultCassa.Initialize
    Return defaultCassa
End Sub
I did not assigned the Params.
 
Upvote 0

teddybear

Well-Known Member
Licensed User
This is the class code.
I would like to use

Dim nuovaCassaO As tCassa
nuovaCassaO.Initialize
...
Dim baseOBJ as Object=nuovaCassaO

Dim tp=GetType(baseOBJ)
Dim nuovoObj As Object = CreateInstance(tp,Null)
CallSub(nuovoObj, "InitializeORM") <===== nothing happens here

'tCassa class
Sub Class_Globals
Public db_orm_fields() As String '= Array As String("idCassa", "Nome", "Int1","Int2","Int3","Logo")
Public db_orm_pks() As String '= Array As String("idCassa")
Public db_orm_tabname As String'="tCassa"
Public idCassa As Int
Public Nome As String
Public Int1 As String
Public Int2 As String
Public Int3 As String
Public Logo As String

End Sub
Public Sub InitializeORM()
db_orm_fields = Array As String("idCassa", "Nome", "Int1","Int2","Int3","Logo")
db_orm_pks= Array As String("idCassa")
db_orm_tabname ="tCassa"
End Sub
Public Sub Initialize()
InitializeORM
End Sub
I don't know why you want to create this class instance instead of directly using it.
For b4x class instance . if it is not initialized. the class methods will not be registered and you won't be able to call them by callsub.
such as
B4X:
Dim nuovaCassaO As tCassa
'nuovaCassaO.Initialize 'if you want to do CallSub it must be initialized
CallSub(nuovaCassaO, "InitializeORM")      '<===== if nuovaCassaO is not initialized. nothing will happen here
For your CreateInstance sub, you also need to run initialize method by javaobject.
 
Last edited:
Upvote 0
Top