Sub llenadospiner
MapPaises.Clear
Spinner1.Clear
c=s.ExecQuery(¨SELECT id,pais FROM Paises ORDER BY pais¨)
If c.RowCount>0 Then
For i=0 To c.RowCount-1
c.Position=i
Spinner1.Add(C.GetString(¨pais¨)
MapPaises.Put("pais","id")
Next
Else
´algo....
Enf if
End Sub
ValorADesignar=MapPaises.Get(Spinner.SelectedItem)
Sub Spinnerllenar
Dim lista As List
lista.Initialize
s.BeginTransaction
c = s.ExecQuery("SELECT * FORM tu_tabla")
For I = 0 To c.RowCount - 1
c.Position = I
Spinner1.Add(c.GetString("nombre"))
lista.Add(c.GetString("id"))
Next
Spinner1.Tag = lista
s.TransactionSuccessful
s.EndTransaction
c.Close
End Sub
Dim id As Int
Dim cbValor As List
cbValor = Spinner1.Tag
id = cbValor.Get(Spinner1.SelectedIndex)
Muchas Gracias por sus respuestas, me sirvieron bastantes, lo que si me quedo una duda.
Cuando yo consulte por un registro (Ej:Cliente), que en su momento se grabo con el país Chile, como le inserto al Spinner el dato al combo con el cual fue grabado Spinner.add(), así lo tengo yo, pero cuando voy a grabar nuevamente se me desfasa el ID con respecto a los demás, me explico.
Ej:
Si Chile es el ID 10, me dice que estoy en el ID 20 que pertenece a otro dato, pero si no inserto el dato al momento de consultar por este cliente, el Spinner carga bien y el ID me lo entrega correctamente, como debería ser?
Gracias.-
No te entendí esa parte, mira haber si me explico mejor.-
Al levantar el Form en el Activity_Create, yo cargo el Spinner con la consulta para que me traiga todos los Países, pero también a su vez ingreso con un código cliente el cual me hace otra consulta y me trae los datos para llenar los campos, necesito que el Spinner se llene con el país que tiene dicho cliente, yo lo e estado haciendo así
Spinner.add(m.Get("pais")), pero me agrega otro dato mas a la lista del Spnnier y al momento de preguntar por el ID del Spinner este se encuentra desfasado.
Gracias.-
Sub Process_Globals
Dim VarPais As String
End Sub
Sub Activity_Create(FirstTime As Boolean)
CargaDatos
End Sub
Sub CargaDatos
'CargaDatos del Cliente
'Una ves que cargas los datos del Cliente, tambien trayendo el pais
VarPais = m.Get("pais")
Spinnerllenar
End Sub
Sub Spinnerllenar
Dim lista As List
lista.Initialize
s.BeginTransaction
If VarPais == "" Then
c = s.ExecQuery("SELECT * FORM Paises")
Else
c = s.ExecQuery("SELECT * FORM Paises WHERE Pais = "&VarPais)
End If
For I = 0 To c.RowCount - 1
c.Position = I
Spinner1.Add(c.GetString("pais"))
lista.Add(c.GetString("id"))
Next
Spinner1.Tag = lista
s.TransactionSuccessful
s.EndTransaction
c.Close
End Sub
Spinner1.SelectedIndex(Spinner1.IndexOf(MapPaises.Get("pais"))
No termino de entender, para que quieres Llenar el spinner con los países si solo vas a utilizar el país con el cual esta asociado el cliente, a no ser que quieras cambiarle el pais has lo que te dije arriba eso debiera funcionar.
Sub Globals
Dim h1 As HttpJob
Dim h2 As HttpJob
Dim Json1 As JSONParser
Dim Json2 As JSONParser
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("plantilla")
h1.initialize("json1", Me)
h1.Download2("http://www.prueba.cl/prueba.php", Array As String("codigo", "0"))
h2.initialize("json2", Me)
h2.Download2("http://www.prueba.cl/cliente.php", Array As String("codigo", "0"))
End Sub
Sub JobDone(job As HttpJob)
If job.Success Then
Select job.JobName
Case "json1"
CargarSpinner(job.GetString)
Case "json2"
CargarCliente(job.GetString)
End Select
Else
Msgbox(job.ErrorMessage, "Error")
End If
End Sub
Sub CargarSpinner(datos As String)
Json1.Initialize(datos)
Dim m As Map
m=Json1.NextObject
Dim data As List
data=m.Get("data")
Dim lista As List
lista.Initialize
For i = 0 To data.Size-1
m=data.Get(i)
Spinner.add(m.Get("Paises"))
lista.Add(m.Get("ID"))
Next
Spinner.Tag = lista
End Sub
Sub CargarCliente(datos As String)
Json2.Initialize(datos)
Dim m As Map
m=Json2.NextObject
Dim data As List
data=m.Get("data")
m=data.Get(0)
LblNom.Text = m.Get("nombre")
...
...
...
Spinner/*Como lo cargo*/
End Sub
B4X:Sub Globals Dim h1 As HttpJob Dim h2 As HttpJob Dim Json1 As JSONParser Dim Json2 As JSONParser End Sub
B4X:Sub Activity_Create(FirstTime As Boolean) Activity.LoadLayout("plantilla") h1.initialize("json1", Me) h1.Download2("http://www.prueba.cl/prueba.php", Array As String("codigo", "0")) h2.initialize("json2", Me) h2.Download2("http://www.prueba.cl/cliente.php", Array As String("codigo", "0")) End Sub
B4X:Sub JobDone(job As HttpJob) If job.Success Then Select job.JobName Case "json1" CargarSpinner(job.GetString) Case "json2" CargarCliente(job.GetString) End Select Else Msgbox(job.ErrorMessage, "Error") End If End Sub
B4X:Sub CargarSpinner(datos As String) Json1.Initialize(datos) Dim m As Map m=Json1.NextObject Dim data As List data=m.Get("data") Dim lista As List lista.Initialize For i = 0 To data.Size-1 m=data.Get(i) Spinner.add(m.Get("Paises")) lista.Add(m.Get("ID")) Next Spinner.Tag = lista End Sub
B4X:Sub CargarCliente(datos As String) Json2.Initialize(datos) Dim m As Map m=Json2.NextObject Dim data As List data=m.Get("data") m=data.Get(0) LblNom.Text = m.Get("nombre") ... ... ... Spinner/*Como lo cargo*/ End Sub
Necesito cargar el país del cliente, pero sin Spinner.add() ya que me lo repetirá, esto para una actualización del país.-
Gracias.-
spinner.SelectedIndex=()
No lo he probado pero podría ser algo como
B4X:spinner.SelectedIndex=()
Si coloco para probar spinner.SelectedIndex= 3, funciona me trae el dato que esta posicionado en el index 3, pero debe faltar algo mas para que inserte el dato real que viene de la base datos Ejemplo si el cliente tiene chile cuando lo cargue en el spinner me diga chile.-
Sub CargarCliente(datos As String)
Json2.Initialize(datos)
Dim m As Map
m=Json2.NextObject
Dim data As List
data=m.Get("data")
m=data.Get(0)
LblNom.Text = m.Get("nombre")
...
...
...
'Spinner Como lo cargo
Spinner.SelectedIndex(Spinner.IndexOf(m.Get("pais"))
End Sub
Sub Process_Globals
Private Server As String
End Sub
Sub Activity_Create(FirstTime As Boolean)
Server = "DIRECCION DEL ARCHIVO PHP EN TU SERVIDOR"
User_PHP
End Sub
Sub GetData(SQL_Cadena As String, sJob As String)
Dim GetSQL As HttpJob
GetSQL.Initialize(sJob, Me)
GetSQL.download2(Server, Array As String ("SQL", SQL_Cadena))
End Sub
Sub User_PHP
GetData("SELECT * FROM usuario WHERE Alguna condicion;","GetUsuario")
End Sub
Sub JobDone(Job As HttpJob)
If Job.Success Then
Dim res As String
res = Job.GetString
Log("Back from Job:" & Job.JobName )
Log("Job Text: " & res)
Dim parser As JSONParser
parser.Initialize(res)
Select Job.JobName
Case "GetUsuario"
Dim ListOfUsuario As List
ListOfUsuario = parser.NextArray 'returns a list with maps
If ListOfUsuario.Size == 0 Then
'
Else
s.BeginTransaction
s.ExecNonQuery("DELETE FROM usuario")
For i = 0 To ListOfUsuario.Size - 1
Dim Users As Map
Users = ListOfUsuario.Get(i)
s.ExecNonQuery2("INSERT INTO usuario VALUES(?,?,?,?,?,?)", Array As String(Users.Get("id_usuario"), Users.Get("nombre"), Users.Get("imei"), Users.Get("activo"), Users.Get("id_zona"), Users.Get("usr_tipo")))
Next
s.TransactionSuccessful
s.EndTransaction
End If
End Select
Else
'ToastMessageShow("Error: " & Job.ErrorMessage, True)
End If
Job.Release
End Sub
Sub SincronizaRegistro
s.BeginTransaction
c = s.ExecQuery("SELECT * FROM registro WHERE id_registro = 0 ORDER BY id")
For i = 0 To c.RowCount-1
c.Position = i
GetData("AQUI PUEDE IR UN INSERT O UN UPDATE MYSQL PHP"; SELECT * FROM USUARIO", "GetRegistro") ' PUEDES HACER UN SELECT Y TRAER LOS REGISTROS ENVIADOS AL SERVIDOR Y DEJARLOS EN EL TELEFONO NUEVAMENTE ACTUALIZADOS.
Next
s.TransactionSuccessful
s.EndTransaction
End Sub
<?php
$host = "SERVIDOR";
$user = "USER";
$pw = "PASS";
$db = "BASE DE DATOS";
$conn = new mysqli($host, $user, $pw, $db);
/* verificar la conexión */
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
/* cambiar el conjunto de caracteres a utf8 */
if (!$conn->set_charset("utf8")) {
printf("Error cargando el conjunto de caracteres utf8: %s\n", $mysqli->error);
exit();
}
$result = $conn->query($sql);
$SQL = $_GET["SQL"];
$SQL_SEPARADO = explode(";", $SQL);
for($i = 0 ;$i<count($SQL_SEPARADO);$i++) {
if ($SQL_SEPARADO[$i]!='') {
$pre = $conn->query($SQL_SEPARADO[$i]);
if ($pre->num_rows > 0) {
$rows = array();
while($r = $pre->fetch_assoc()) {
$rows[] = $r;
}
}
}
}
print json_encode($rows);
?>
Por casualidad, no has probado lo que te publicaron mas arriba. Igual tienes que tener encenta que como estas manejando los datos directamente con json es mas difícil poder manejarlos, seria mas fácil que cuando inicie la aplicación sincronizar los datos al teléfono y luego manejarlos desde la aplicación.
B4X:Sub CargarCliente(datos As String) Json2.Initialize(datos) Dim m As Map m=Json2.NextObject Dim data As List data=m.Get("data") m=data.Get(0) LblNom.Text = m.Get("nombre") ... ... ... 'Spinner Como lo cargo Spinner.SelectedIndex(Spinner.IndexOf(m.Get("pais")) End Sub
Spinner.SelectedIndex = Spinner.IndexOf(Map.Get(m.Get("pais")))
Lo que pasa es que tienes que cargar primero los datos del cliente y al final el spinner esta cargando primero el spinner.B4X:Spinner.SelectedIndex = Spinner.IndexOf(Map.Get(m.Get("pais")))
Así me resulta pero no al 100% algo pasa que vuelvo atrás y adelante, osea carga todo de nuevo y no muestra el indice del cliente, como que queda en la carga inicial, pero es a veces, pero no es la idea.-
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?