Spanish [SOLUCIONADO] Cargar datos en ListView

Similar threads

B4i Tutorial iBeacons
B4i Code Snippet Monitor http requests progress
B4i Tutorial Notifications with actions
B4i Library iXmlBuilder
Other B4i v1.21 is released

TheArkhangel

Member
Licensed User
Un saludo a todos para empezar.

Este es mi problema, trato de volcar una consulta proveniente de un webservice a algo que se asemeje o se parezca a un control DataGridView pero no he encontrado nada ni un ejemplo que me permita al menos poder realizar lo que indico.

Necesitaría poder usar el TabHost para poner en cada uno de ellos un grid que se carguen las consultas que se realicen en dichos grid. He estado mirando ejemplos y reconozco que soy muy cortito porque no logro entender como hacerlo.

Lo único que tengo es la consulta en un listview modificado del ejemplo de Villalpando y ni se como poder añadir columnas y filas.

Agradecería un ejemplo claro si alguien domina este tema ya que no logro avanzar y mi intención es poder almacenar tanto en celdas como en variables cuando se selecciona una fila los valores de este tipo de consulta
Query="SELECT ID, codigo, denominación, familia, unds, pcio, importe FROM articulos ORDER BY ID"

Aquí os dejo el código hasta donde he llegado y gracias por molestaros en leer todo esto.

Sub Process_Globals
DimhcAsHttpClient
Dimcodigo, denominacionAsInt
codigo = 1' Es la tarea 1
denominacion = 2' Es la tarea 2
End Sub
Sub Globals
' Renglones puede contener dos renglones:
' Renglon1 (ES)
' Renglon2 (España)
TypeRenglones (Renglon1 AsString, Renglon2 AsString)
DimLabel1, Label2AsLabel
DimListView1AsListView
End Sub
Sub Activity_Create(FirstTime AsBoolean)
If FirstTime Then
hc.Initialize("hc")
EndIf
Activity.LoadLayout("1")
Buscar_lista_de_articulos
' Evita el error android.os.NetworkOnMainThreadException
' Activar librerías Phone y Reflection
Dim p AsPhone
If p.SdkVersion >= 9Then
Dim r AsReflector
r.Target = r.CreateObject("android.os.StrictMode$ThreadPolicy$Builder")
r.Target = r.RunMethod("permitAll")
r.Target = r.RunMethod("build")
r.RunStaticMethod("android.os.StrictMode", "setThreadPolicy", _
ArrayAsObject(r.Target), ArrayAsString("android.os.StrictMode$ThreadPolicy"))
EndIf
End Sub

Sub Buscar_lista_de_articulos
ProgressDialogShow("Buscando lista de articulos.")
Dim req AsHttpRequest
Dim Query AsString
Query="SELECT codigo, denominacion FROM articulos ORDER BY ID"
req.InitializePost2("http://localhost/dvcon.php", Query.GetBytes("UTF8"))
hc.Execute(req, codigo) '''''''' En ResponseSuccess hará el Case de CODIGO
End Sub

' Esta es la Respuesta de la orden hc.Execute
Sub hc_ResponseSuccess (Response AsHttpResponse, tarea AsInt)
Dim res AsString
res = Response.GetString("UTF8")
Log("Respuesta del servidor: " & res)
Dim parser AsJSONParser
parser.Initialize(res)
Select tarea

' ************* CODIGO *****************
Casecodigo
' Añade paises la ListView1
Dim articulos AsList
articulos.Initialize
articulos = parser.NextArray
For i = 0To articulos.Size - 1
Dim m AsMap
m = articulos.Get(i)
Dim Renglon AsRenglones
Renglon.Renglon1 = m.Get("codigo") ' ES
Renglon.Renglon2 = m.Get("denominacion") ' España
ListView1.AddTwoLines2(Renglon.Renglon1, Renglon.Renglon2, Renglon)
Next
ProgressDialogHide

' ************* DENOMINACION **************
Casedenominacion
Dim l AsList
l = parser.NextArray
If l.Size = 0Then
Label1.Text = "N/A"
Else
Dim m AsMap
m = l.Get(0)
Label1.Text = m.Get("codigo")
EndIf
EndSelect
Response.Release
End Sub

' Cuando pulsa en el ListView, busca en la BD del Servidor la denominacion
Sub ListView1_ItemClick (Position AsInt, Value AsObject)
IfIsBackgroundTaskRunning(hc, denominacion) Then' Está ocupado en llamada anterior.
ToastMessageShow("Espera hasta completar la llamada anterior.", False)
Return
EndIf

Dim Renglon AsRenglones
Renglon = Value
Label2.Text = Renglon.Renglon2
Label1.Text = "Conectando con el servidor"
Dim req AsHttpRequest
Dim Query AsString
Query="SELECT codigo, denominacion FROM articulos WHERE codigo='" & Renglon.Renglon1 & "'"
req.InitializePost2("http://localhost/dvcon.php", Query.GetBytes("UTF8"))
hc.Execute(req, denominacion) '''''''' En ResponseSuccess hará el Case de poblacion

End Sub


' Error en la conexión con la Base de datos.
Sub hc_ResponseError (Response AsHttpResponse, Reason AsString, StatusCode AsInt, tarea AsInt)
Log("Error: " & Reason & ", StatusCode: " & StatusCode)
If Response <> NullThen
Log(Response.GetString("UTF8"))
Response.Release
EndIf
ProgressDialogHide
End Sub
 

TheArkhangel

Member
Licensed User
Gracias por responder Xicu, se que no es muy ortodoxo pero habría alguna forma de que me mostrases el ejemplo pero con mi código ? No pretendo que me hagan el trabajo.....es únicamente para poder COMPRENDER como uso el flexible listview dentro de mi código con mi consulta y a partir de ahí poder seguir.

Viéndolo es más sencillo entenderlo que con el ejemplo y gracias aunque no sea posible por molestarte en ayudar.
 

TheArkhangel

Member
Licensed User
Necesitaría si alguien sabe y puede, un ejemplo hecho con mi consulta para entender como cargar los datos que recojo de una consulta y volcarlos a variables para luego insertarlo en un listview con formato de tabla (tabular se entiende) y así poder seleccionar la fila que me interese. Esta es la consulta que realizo a mysql mediante webservice

Sub Buscar_lista_de_articulos
ProgressDialogShow("Buscando lista de articulos.")
Dim req AsHttpRequest
Dim Query AsString
Query="SELECT fecha, ID, codigo, denominación, unds, precio, importe FROM articulos ORDER BY fecha"
req.InitializePost2("http://localhost/dvcon.php", Query.GetBytes("UTF8"))
hc.Execute(req, codigo) '''''''' En ResponseSuccess hará el Case de CODIGO
End Sub

Quizás así sea mas sencillo de entender que todo el rollo del principio y gracias al foro por la ayuda.
 

TheFalcon

Active Member
Licensed User
Te faltaría creo ya que el Mysql lo tengo parado ahora mismo el Response:

No me hagas mucho caso pero creo que una cosa así te puede orientar

B4X:
Sub hc_ResponseSuccess (Response As HttpResponse, tarea As Int)
Dim res As String
res = Response.GetString("UTF8")
Log("Respuesta del servidor: " & res)

Dim parser As JSONParser
parser.Initialize(res)

Select tarea

Case artículos


Dim Lista_articulos As List
Lista_articulos.Initialize
Lista_ articulos = parser.NextArray
For i = 0 To Lista_ articulos.Size - 1
Dim m As Map
m = Lista_ articulos.Get(i)

dim fecha as string
dim ID as int

fecha = m.Get("fecha")
ID = m.Get("ID")   
  

Next
ProgressDialogHide
End select
Response.Release

End sub
 

TheArkhangel

Member
Licensed User
Gracias por la respuesta TheFalcon, ahora solo me queda saber como asignarlo a un listview de forma tabular y que al seleccionar los datos se guarden en variables para volcarlos a otro listview
 
Top