Android Question Table view

Peekay

Active Member
Licensed User
Longtime User
I am using the Table.bas module as per the example.

Here is my Main routine:
Main:
public Sub GetMessagesSent
    DateTime.DateFormat = "dd-MMM-yy"
    Dim req As DBRequestManager = CreateRequest
    Dim cmd As DBcommand = CreateCommand("showsentmessages", Array(AndroidID))
    Dim ColWidths(5) As Int
    Table1.ClearAll
    Table1.SetHeader(Array As String("Date","Message","Remarks","Solved","ID"))
    ColWidths(0)=55dip
    ColWidths(1)=260dip
    ColWidths(2)=0dip
    ColWidths(3)=0dip
    ColWidths(4)=50dip
    Table1.SetColumnsWidths(ColWidths)
    Table1.RowHeight=60dip
    Table1.SingleLine = False
    
    Wait For (req.ExecuteQuery(cmd, 0, AndroidID)) JobDone(j As HttpJob)
    If j.Success Then
        req.HandleJobAsync(j, "req")
        Wait For (req) req_Result(res As DBresult)
        Dim Alignments(5) As Int
        Alignments = Array As Int(Bit.Or(Gravity.LEFT, Gravity.CENTER_VERTICAL), Bit.Or(Gravity.LEFT, Gravity.CENTER_VERTICAL), Bit.Or(Gravity.LEFT, Gravity.CENTER_VERTICAL), Bit.Or(Gravity.CENTER, Gravity.CENTER_VERTICAL), Bit.Or(Gravity.CENTER, Gravity.CENTER_VERTICAL))
        Table1.SetCellAlignments(Alignments)
        If res.Rows.Size > 0 Then
            'Dim Row(5) As String
            For i = 1 To res.Rows.Size-1
                Dim Row() As Object    =Array(res.Columns.Get(0),res.Columns.Get(1) & Chr(10) & "Reply: " & res.Columns.Get(2),res.Columns.Get(2),res.Columns.Get(3),res.Columns.Get(4))    ' = Array("DateTime","Message","Remark","Resolved","ID")
                Table1.addRow(Row)
            Next
            pnlTables.Visible = True
        Else
            lblMessage.text = "No messages sent to office were fetched."
            pnlTables.Visible = False
            Table1.visible = False
        End If
    Else
        Log("ERROR: " & j.ErrorMessage)
    End If
    j.release
    CallSubDelayed(Me, "resGetMessagesSent_Complete")
End Sub

I know my data is right and the routine does not give me an error.

I get this error in Tables.bas:

Error occurred on line: 1130 (Table)
java.lang.IllegalArgumentException: method pk.odendaalNew.table._addrow argument 2 has type java.lang.String[], got java.lang.Object[]
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:351)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:144)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:193)
at anywheresoftware.b4a.shell.DebugResumableSub$RemoteResumableSub.resume(DebugResumableSub.java:22)
at anywheresoftware.b4a.BA.checkAndRunWaitForEvent(BA.java:267)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:137)
at anywheresoftware.b4a.BA$2.run(BA.java:387)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:8016)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1076)

What could be the problem?

Thanks
PK
 

mc73

Well-Known Member
Licensed User
Longtime User
Tried also this?
B4X:
Dim Row() As string    =Array as string(res.Columns.Get(0),res.Columns.Get(1) & Chr(10) & "Reply: " & res.Columns.Get(2),res.Columns.Get(2),res.Columns.Get(3),res.Columns.Get(4))
Just to see if you get an error right here.
 
Upvote 0

mc73

Well-Known Member
Licensed User
Longtime User
From what I see you are probably misusing res.
Inside your loop, I think you should use res. Rows.get as a list and then convert it to your array.
 
Upvote 0

Peekay

Active Member
Licensed User
Longtime User
Inside your loop, I think you should use res. Rows.get as a list and then convert it to your array.

Could you give me some code lines. I have not worked with lists or maps.

These code lines works for me, but they repeat one row's data for as many rows there are.

Rows:
for i=0 to res.rows.size-1
    Dim Row(5) as string
    dim Datarow(5) as object = res.rows.get(i)
    row(0)=datarow(0)
    .... up to 4
    table1.addrow(row)
next

PK
 
Upvote 0

mc73

Well-Known Member
Licensed User
Longtime User
You may want to try:
Rows:
for i=0 to res.rows.size-1
    Dim Row(5) as string=res.rows.get(i)
    table1.addrow(row)
next
 
Upvote 0

Peekay

Active Member
Licensed User
Longtime User
I have solved it with this routine:
Routine:
If res.Rows.Size > 0 Then
Dim Row(5) As String
            For i = 1 To res.Rows.Size-1
                Dim DataRow(5) As Object = res.Rows.Get(i)
                Row(0)=DataRow(0)
                Row(1)=DataRow(1) & Chr(10) & "Reply: " & DataRow(2)
                Row(2)=DataRow(2)
                Row(3)=DataRow(3)
                Row(4)=DataRow(4)
                Table1.addRow(Row)
            Next

PK
 
Last edited:
Upvote 0
Top