buongiorno a tutti
ho da un po questo problema, che anche utilizzando chat gpt non riesco a risolvere.
Vorrei aggiungere una custom list view il lazy loading.
La customlistview, carica i dati ottenuti da un httpjob in json.
Questo è il codice fornito da chat gpt, dove imposta jRoot come variabile globale per riutilizzarla
Restituisce l' errore "waiting for regular variable followed with "="
codice alternativo
ho da un po questo problema, che anche utilizzando chat gpt non riesco a risolvere.
Vorrei aggiungere una custom list view il lazy loading.
La customlistview, carica i dati ottenuti da un httpjob in json.
B4X:
Sub downloadEmailsLista
UsersCV.Clear
Dim bytemail() As Byte
Dim byteSalsy() As Byte
Dim index As Int = 1
e.Initialize
Dim j As HttpJob
j.Initialize("", Me) 'name is empty as it is no longer needed
j.Download(ServerURl & "/xxxxxxxxxxxxxx/restapi.php?api=tbl-users&orderby=my_iduser&sort=asc") '&orderby=my_iduser&sort=asc") '2")
ProgressDialogShow2("Loading User list...",False)
Wait For (j) JobDone(j As HttpJob)
If j.Success Then
Log(j.GetString)
Dim parser As JSONParser
parser.Initialize(j.getstring)
Dim jRoot As List = parser.NextArray
For Each coljRoot As Map In jRoot
my_enabled = coljRoot.Get("my_enabled")
my_appversion = coljRoot.Get("my_appversion")
my_email = coljRoot.Get("my_email")
my_last_see = coljRoot.Get("my_last_see")
my_btcaddress = coljRoot.Get("my_btcaddress")
my_ispremium = coljRoot.Get("my_ispremium")
Dim my_salt As String = coljRoot.Get("my_salt")
Dim my_registration_date As String = coljRoot.Get("my_registration_date")
Dim my_iduser As Int = coljRoot.Get("my_iduser")
byteSalsy = encode.DecodeBase64(my_salt)
Dim stringSalt As String = DecryptText(byteSalsy,Main.app_id)
my_salt = stringSalt
bytemail = encode.DecodeBase64(my_email)
stringmail = DecryptText(bytemail,my_salt)
e.Add(stringmail)
DateTime.DateFormat = "yyyy-MM-dd HH:mm:ss"
Dim dt As Long = DateTime.DateParse(my_last_see)
DateTime.DateFormat = "dd/MM/yyyy"
' Log(DateUtils.PeriodBetweenInDays(DateTime.DateParse($"$Date{dt}"$),DateTime.Now).Days)
Dim daydif As Int = DateUtils.PeriodBetweenInDays(DateTime.DateParse($"$Date{dt}"$),DateTime.Now).Days
UsersCV.Add(CreateItem(UsersCV.AsView.Width, my_iduser, stringmail, daydif,my_appversion), "")
Next
Else
ToastMessageShow("Error: " & j.ErrorMessage, True)
End If
j.Release
ProgressDialogHide
End Sub
B4X:
Private Sub CreateItem(Width As Int, userid As String, email As String, last As String, version As String) As Panel
Dim p As B4XView = xui.CreatePanel("")
Dim height As Int = 160dip 'UsersCV.AsView.Height '350dip '50dip
p.SetLayoutAnimated(0, 0, 0, Width, height)
p.LoadLayout("CLV_UTENTI")
p.Color = Colors.Cyan
If my_enabled = 0 Then
Panel1.Color = 0xAEFF0000
End If
lbluserID.Text = userid 'user id da searchbox
lblemail.Text = email 'email decriptata
lbllastactivity.Text = "Ultima attività: "
txtastactivity.Text = last 'differenza in giorni della ultima attività
lblversion.Text = "Versione: "
txtversion.Text = version
index = userid
Return p
End Sub
B4X:
Questo è il codice fornito da chat gpt, dove imposta jRoot come variabile globale per riutilizzarla
B4X:
Sub downloadEmailsLista
' Initialize the variables.
Dim UsersCV As CustomListView
Dim bytemail() As Byte
Dim byteSalsy() As Byte
Dim index As Int = 1
Dim e As List
e.Initialize
' Create the custom list view.
' Load the data from the API.
Dim j As HttpJob
j.Initialize("", Me) 'name is empty as it is no longer needed
j.Download(ServerURl & "/clickandclaim-host/restapi.php?api=tbl-users&orderby=my_iduser&sort=asc")
ProgressDialogShow2("Loading User list...",False)
Wait For (j) JobDone(j As HttpJob)
If j.Success Then
Log(j.GetString)
Dim parser As JSONParser
parser.Initialize(j.getstring)
jRoot = parser.NextArray
Else
ToastMessageShow("Error: " & j.ErrorMessage, True)
End If
j.Release
ProgressDialogHide
End Sub
B4X:
Sub JobDone(j As HttpJob)
If j.Success Then
Log(j.GetString)
Dim parser As JSONParser
parser.Initialize(j.getstring)
jRoot = parser.NextArray
Else
ToastMessageShow("Error: " & j.ErrorMessage, True)
End If
j.Release
ProgressDialogHide
End Sub
B4X:
Private Sub UsersCV_LazyLoad (FirstIndex As Int, LastIndex As Int)
Dim bytemail() As Byte
Dim byteSalsy() As Byte
Dim daydif As Int = 0
Dim ExtraSize As Int = 20
For i As Int = Max(0, FirstIndex - ExtraSize) To Min(LastIndex + ExtraSize, UsersCV.Size - 1):
If i >= jRoot.Size Then Exit
Dim coljRoot As Map = jRoot.Get(i)
my_enabled = coljRoot.Get("my_enabled")
my_appversion = coljRoot.Get("my_appversion")
my_email = coljRoot.Get("my_email")
my_last_see = coljRoot.Get("my_last_see")
my_iduser = coljRoot.Get("my_iduser")
UsersCV.Add(CreateItem(UsersCV.AsView.Width, my_iduser, my_email, daydif, my_appversion), "")
Next
End Sub
Restituisce l' errore "waiting for regular variable followed with "="
B4X:
Private Sub CreateItem(Width As Int, userid As String, email As String, last As String, version As String) As Panel
Dim p As B4XView = xui.CreatePanel("")
Dim height As Int = 160dip 'UsersCV.AsView.Height '350dip '50dip
p.SetLayoutAnimated(0, 0, 0, Width, height)
p.LoadLayout("CLV_UTENTI")
p.Color = Colors.Cyan
lbluserID.Text = userid
lblemail.Text = email
lbllastactivity.Text = "Ultima attività: "
txtastactivity.Text = last
lblversion.Text = "Versione: "
txtversion.Text = version
index = userid
Return p
End Sub
B4X:
Sub UsersCV_VisibleRangeChanged(FirstVisible As Int, LastVisible As Int)
' Lazy load the data for the visible range
Dim Items() As Object
Items = LoadData(FirstVisible, LastVisible)
' Add the items to the custom list view.
For i = FirstVisible To LastVisible
UsersCV.Add(Items(i), "")
Next
End Sub
B4X:
Sub LoadData(FirstVisible As Int, LastVisible As Int) As Object()
' Create an array to store the data
Dim Items() As Object
' Iterate over the visible range
For i = FirstVisible To LastVisible
' Add the data to the array
Items = Array(i)
Next
' Return the array
Return Items
End Sub
codice alternativo
B4X:
Sub UsersCV_LazyLoad(FirstIndex As Int, LastIndex As Int)
Dim ExtraSize As Int = 20
Dim daydif As Int
Dim items() As Object
If jRoot.IsInitialized Then
items = jRoot.GetRange(FirstIndex, LastIndex + 1)
For i As Int = 0 To items.Size - 1
daydif = DateUtils.GetDaysBetween(DateTime.Now, items(i).Get("my_last_see"))
UsersCV.Add(CreateItem(UsersCV.AsView.Width, items(i).Get("my_iduser"), items(i).Get("my_email"), daydif, items(i).Get("my_appversion")), "")
Next
End If
End Sub
{/code]
ma da continuamente errore
Magari qualcuno ha già avuto questa necessità.
Grazie