Buenas! Estoy desarrollando una aplicacion en la que me tengo que conectar con una base de datos externa mysql (estoy utilizando wamp). He conseguido insertar usuarios con el siguiente codigo:
Esa parte me funciona, pero ahora me he quedado atascado, estoy intentando leer los datos que hay en la base de datos y mostrarlos en una lista. Siguiendo un codigo extraido de un tutorial no me funciona:
El error que me salta en el log es el siguiente:
Error ocurred on line: 62 (Main)
java.lang.RuntimeException: JSON Array expected.
Pero unas lineas mas arriba, en el log, me sale la informacion que hay dentro de la base de datos de la siguiente manera:
[{"nombre":"espana","ID":"ES"},{"nombre":"francia","ID":"FR"}]
Por eso entiendo que el problema lo tengo a la hora de mostrar los datos, porque si que los recibo.
Podeis ayudarme a solucionar el error o decirme otras maneras de hacerlo? He buscado por el foro sobre este problema y sigo sin poder solucionarlo.
Gracias!
B4X:
Sub Process_Globals
Dim hc As HttpClient
End Sub
Sub Globals
Dim EditText1, EditText2, EditText3, EditText4 As EditText
Public ID, nombre, poblacion, datos, capital As String
Dim ListView1 As ListView
Dim button1, button2 As Button
End Sub
Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
hc.Initialize("hc")
End If
Activity.LoadLayout("layout") ' Cargamos el Designer
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub Button1_Click
ID = EditText1.Text
nombre = EditText2.Text
poblacion = EditText3.Text
Dim req As HttpRequest
Dim Query As String
Query="INSERT INTO paises (ID, nombre, poblacion) VALUES ('" & ID & "','" & nombre & "','" & poblacion & "')"
req.InitializePost2("http://192.168.1.41/paises.php", Query.GetBytes("UTF8"))
hc.Execute(req, 1)
End Sub
Sub button2_Click
capital = EditText4.Text
Dim req As HttpRequest
Dim Query As String
Query = "INSERT INTO informacion (ID, capital) VALUES ('" & ID & "','" & capital & "')"
req.InitializePost2("http://192.168.1.41/paises.php", Query.GetBytes("UTF8"))
hc.Execute(req, 1)
End Sub
Sub hc_ResponseSuccess (Response As HttpResponse, tarea As Int)
Dim resultString As String
resultString = Response.GetString("UTF8")
Msgbox("Los datos han sido almacenados", "Éxito de operación")
End Sub
Sub hc_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int, tarea As Int)
Log("Error: " & Reason & ", StatusCode: " & StatusCode)
If Response <> Null Then
Log(Response.GetString("UTF8"))
Response.Release
End If
End Sub
Esa parte me funciona, pero ahora me he quedado atascado, estoy intentando leer los datos que hay en la base de datos y mostrarlos en una lista. Siguiendo un codigo extraido de un tutorial no me funciona:
B4X:
Sub Process_Globals
Dim hc As HttpClient
Dim paises, poblacion As Int
paises = 1 ' Es la tarea 1
End Sub
Sub Globals
Type Renglones (Renglon1 As String, Renglon2 As String)
Dim Label1, Label2 As Label
Dim ListView1 As ListView
End Sub
Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
hc.Initialize("hc")
End If
Activity.LoadLayout("1")
Buscar_lista_de_paises
End Sub
Sub Buscar_lista_de_paises
ProgressDialogShow("Buscando lista de países.")
Dim req As HttpRequest
Dim Query As String
Query="SELECT nombre, ID FROM paises ORDER BY ID"
req.InitializePost2("http://192.168.1.41/paises.php", Query.GetBytes("UTF8"))
hc.Execute(req, paises) '''''''' En ResponseSuccess hará el Case de paises
End Sub
' Esta es la Respuesta de la orden hc.Execute
Sub hc_ResponseSuccess (Response As HttpResponse, tarea As Int)
Dim res As String
res = Response.GetString("UTF8")
Log("Respuesta del servidor: " & res)
'res = [{"nombre":"Argentina","id":"AR"},.... hasta ....,{"nombre":"Venezuela","id":"VE"}]
Dim parser As JSONParser
parser.Initialize(res)
Select tarea
Case paises
' Añade paises la ListView1
Dim countries As List
countries.Initialize
countries = parser.NextArray
For i = 0 To countries.Size - 1
Dim m As Map
m = countries.Get(i)
Dim Renglon As Renglones
Renglon.Renglon1 = m.Get("ID") ' ES
Renglon.Renglon2 = m.Get("nombre") ' España
ListView1.AddTwoLines2(Renglon.Renglon1, Renglon.Renglon2, Renglon)
Next
ProgressDialogHide
End Select
Response.Release
End Sub
Sub hc_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int, tarea As Int)
Log("Error: " & Reason & ", StatusCode: " & StatusCode)
If Response <> Null Then
Log(Response.GetString("UTF8"))
Response.Release
End If
ProgressDialogHide
End Sub
El error que me salta en el log es el siguiente:
Error ocurred on line: 62 (Main)
java.lang.RuntimeException: JSON Array expected.
Pero unas lineas mas arriba, en el log, me sale la informacion que hay dentro de la base de datos de la siguiente manera:
[{"nombre":"espana","ID":"ES"},{"nombre":"francia","ID":"FR"}]
Por eso entiendo que el problema lo tengo a la hora de mostrar los datos, porque si que los recibo.
Podeis ayudarme a solucionar el error o decirme otras maneras de hacerlo? He buscado por el foro sobre este problema y sigo sin poder solucionarlo.
Gracias!