B4J Question How to populate Tableview with a json string

saeed10051

Active Member
Licensed User
Longtime User
I am running jokhttputils2 and json parser to get a json string from an online database.
I have a Tableview on my java app which i want to populate with the data received in the json string.
I am running following code for that
B4X:
Sub loadlistview
Dim Table As List
Dim p As JSONParser
Dim res As String
Dim j As HttpJob
Dim m1 As Map
j.Initialize("", Me)
j.Download("http://saeedhassan.atwebpages.com/r.php")
Wait For (j) jobdone (j As HttpJob)
If j.Success Then
    res = j.GetString
    Log(res)
    p.Initialize(res)
        Table = p.NextArray
        TableView1.SetColumns(Array As String("ID", "NAME", "PRICE"))
        TableView1.Items.Add(p.NextArray)
in the log i can see that i have got the following json string back from online database

[{"itemid":"1","itemname":"chicken biryani","itemprice":"20"},{"itemid":"2","itemname":"mutton biryani","itemprice":"25"},{"itemid":"3","itemname":"rice","itemprice":"10"},{"itemid":"4","itemname":"chicken qorma","itemprice":"15"},{"itemid":"5","itemname":"mutton qorma","itemprice":"25"},{"itemid":"6","itemname":"naan","itemprice":"2"},{"itemid":"7","itemname":"vegetable","itemprice":"8"},{"itemid":"8","itemname":"daal","itemprice":"8"},{"itemid":"9","itemname":"egg","itemprice":"5"},{"itemid":"10","itemname":"egg sandwich","itemprice":"10"},{"itemid":"11","itemname":"tea","itemprice":"1"},{"itemid":"12","itemname":"coffee","itemprice":"3"},{"itemid":"13","itemname":"sweet","itemprice":"10"},{"itemid":"14","itemname":"donut","itemprice":"5"},{"itemid":"15","itemname":"water","itemprice":"1"},{"itemid":"16","itemname":"pizza","itemprice":"30"},{"itemid":"17","itemname":"ice cream","itemprice":"7"}]

however the tableview is not getting populated it is giving me a casting error as i am getting a list of map items from onlie server, i have tried to put the Table list also in Tableview but it is also giving error
 
[{"itemid":"1","itemname":"chicken biryani","itemprice":"20"},{"itemid":"2","itemname":"mutton biryani","itemprice":"25"},{"itemid":"3","itemname":"rice","itemprice":"10"},{"itemid":"4","itemname":"chicken qorma","itemprice":"15"},{"itemid":"5","itemname":"mutton qorma","itemprice":"25"},{"itemid":"6","itemname":"naan","itemprice":"2"},{"itemid":"7","itemname":"vegetable","itemprice":"8"},{"itemid":"8","itemname":"daal","itemprice":"8"},{"itemid":"9","itemname":"egg","itemprice":"5"},{"itemid":"10","itemname":"egg sandwich","itemprice":"10"},{"itemid":"11","itemname":"tea","itemprice":"1"},{"itemid":"12","itemname":"coffee","itemprice":"3"},{"itemid":"13","itemname":"sweet","itemprice":"10"},{"itemid":"14","itemname":"donut","itemprice":"5"},{"itemid":"15","itemname":"water","itemprice":"1"},{"itemid":"16","itemname":"pizza","itemprice":"30"},{"itemid":"17","itemname":"ice cream","itemprice":"7"}]
This is the code to parse the json

B4X:
Dim parser As JSONParser
parser.Initialize(<text>)
Dim root As List = parser.NextArray
For Each colroot As Map In root
 Dim itemid As String = colroot.Get("itemid")
 Dim itemname As String = colroot.Get("itemname")
 Dim itemprice As String = colroot.Get("itemprice")
Next

You need to build the data for Tableview by yourself
 
Upvote 0
This is the code to parse the json

B4X:
Dim parser As JSONParser
parser.Initialize(<text>)
Dim root As List = parser.NextArray
For Each colroot As Map In root
Dim itemid As String = colroot.Get("itemid")
Dim itemname As String = colroot.Get("itemname")
Dim itemprice As String = colroot.Get("itemprice")
Next

You need to build the data for Tableview by yourself
Thanks Donmanfred i have done that type of data mining in a B4A program but i dont understand how to put these individual values in the Tableview, as it is asking for an object in TableView1.Items.Add
 
Upvote 0
thanks DonManfred, let me try that. Actually there is a gap of ten years, i have recently again started using B4x
 
Upvote 0
I suggest to watch some Vieos then.

And/Or read @klaus Booklets

I am running following code. it is populating the table view as intended
B4X:
Sub loadlistview
Dim Table As List
Dim p As JSONParser
Dim res As String
Dim j As HttpJob
Dim m1 As Map
j.Initialize("", Me)
j.Download("http://saeedhassan.atwebpages.com/r.php")
Wait For (j) jobdone (j As HttpJob)
If j.Success Then
    res = j.GetString
    Log(res)
    p.Initialize(res)
        Table = p.NextArray
        TableView1.SetColumns(Array As String("ID", "NAME", "PRICE"))
            
        For i = 0 To Table.Size-1
            m1 = Table.Get(i)
            Dim row() As Object
            row = Array As String(m1.Get("itemid"),m1.Get("itemname"),m1.Get("itemprice"))
            TableView1.Items.Add(row)
        Next
End If
 
Upvote 0
Back
Top