Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > FireMonkey
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-11-2016
NicolasP NicolasP is offline
Registrado
 
Registrado: May 2013
Posts: 9
Poder: 0
NicolasP Va por buen camino
Json nulo con REST y android

Hola:
Recupero los datos de un cliente pasando su ID como parámetro en una cunsulta que esta en una página en php.
Los recibo en JSON por medio de RESTResponse. , todo bien cuando viene algo.
Cuando la consulta da vacía ... en el servidor PHP lo programé para devolver el string "No hay datos". (hace
Código PHP:
echo "no hay datos"
)

El código que pongo aquí funciona muy bien en windows 7.( 32 y 64) , pero cuando compilo para android NO. Si recibe un objeto funciona bien, pero sino, se cuelga y se cierra.

Código Delphi [-]
procedure TFmMain.RESTRequest1AfterExecute(     Sender: TCustomRESTRequest);
 var
   i : Integer;
begin

 
  if assigned(RESTResponse1.JSONValue) then
     memo1.Lines.Text := TJson.Format(RESTResponse1.JSONValue) ;
  else
     memo1.Lines.Text := RESTResponse1.Content;
  
end;

DX7, Android 6, MotoG3
Responder Con Cita
  #2  
Antiguo 29-11-2016
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: May 2003
Ubicación: Colombia
Posts: 6.798
Poder: 20
jhonny Va camino a la fama
¿De casualidad te muestra "Error in AsyncTask"?, si es así muéstranos el llamado a RESTRequest1.Execute

Si este no es el error que sale, dinos cuál es.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"
Responder Con Cita
  #3  
Antiguo 02-12-2016
NicolasP NicolasP is offline
Registrado
 
Registrado: May 2013
Posts: 9
Poder: 0
NicolasP Va por buen camino
Jhonny :
No me dice ningún error , se va al fondo y cuando la traigo se reinicia. La verdad no se bien como depurar en android,
tal vez me falte configurar algo para que me diga los errores. Gracias por tu interés.
Código Delphi [-]
  Memo1.Lines.clear;
  AniIndicator1.Enabled := true;
  AniIndicator1.visible := true;
 Hilo := THilo.Create(True);
 Hilo.Start;
 while not Hilo.Finished do
  begin
      sleep(20);
   Application.ProcessMessages;
  end;
  AniIndicator1.Enabled := false;
  AniIndicator1.visible := false;

proceso en el thread

Código Delphi [-]
procedure THilo.Execute;
begin
  FmMain.RestClient1.BaseURL := sitio\consulta.php?doc='+ FmMain.Ed_idcliente.text;
  FmMain.RestRequest1.Execute;
end;

Insisto , si viene un registro en json funciona perfecto, tanto en win como en android.
Responder Con Cita
  #4  
Antiguo 02-12-2016
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: May 2003
Ubicación: Colombia
Posts: 6.798
Poder: 20
jhonny Va camino a la fama
Cita:
Empezado por NicolasP
No me dice ningún error , se va al fondo y cuando la traigo se reinicia. La verdad no se bien como depurar en android,
tal vez me falte configurar algo para que me diga los errores.
Sólo sería cuestión de poner el "Build Configuration" en modo Debug y desplegar el apk con F9, pero no nos centremos en esto, voy a ir directo a lo que necesitas en este caso en particular.

Prueba con este cambio a ver qué tal:

1) Quita lo que tienes en RESTRequest1AfterExecute.

2) Cambias el código principal que me has mostrado por este:

Código Delphi [-]
  FmMain.RestClient1.BaseURL := 'sitio\consulta.php?doc='+ FmMain.Ed_idcliente.text;   
  Memo1.Lines.clear;
  AniIndicator1.Enabled := true;
  AniIndicator1.Visible := true;
 
  FmMain.RESTRequest1.ExecuteAsync(
  procedure
  begin
    TThread.Synchronize(TThread.CurrentThread,
    procedure 
    begin
       if assigned(RESTResponse1.JSONValue) then
         Memo1.Lines.Text := TJson.Format(RESTResponse1.JSONValue) ;
       else
         Memo1.Lines.Text := RESTResponse1.Content;

       AniIndicator1.Enabled := false;
       AniIndicator1.Visible := false;
    end);
  end, False);

Cita:
Empezado por NicolasP
Insisto , si viene un registro en json funciona perfecto, tanto en win como en android.
Mi teoría es que cuando el dato no existe el motor se demora un poco más en devolverte el resultado, así que la app entra al "sleep(20);" que tienes ahí y como al Android estas cosas no le gustan para nada en el hilo principal, se cierra de inmediato.

P.D: Para entender un poco más acerca del método ExecuteAsync que he usado puedes leer mi artículo en PuroDelphi http://purodelphi.com/2015/11/18/pet...segundo-plano/
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

Última edición por jhonny fecha: 02-12-2016 a las 16:48:51. Razón: Agregar un par de instrucciones
Responder Con Cita
  #5  
Antiguo 03-12-2016
NicolasP NicolasP is offline
Registrado
 
Registrado: May 2013
Posts: 9
Poder: 0
NicolasP Va por buen camino
Hace exactamente lo mismo con el código que me pasaste. También le saqué el AniIdicator...pero igual.
Me queda probar de instalarlo en otro Andorid... tengo el 6.0 .
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problemón con JSON MaxiDucoli OOP 7 25-09-2015 18:54:39
Acceder a Webservices Rest/Json lbidi Internet 3 24-02-2015 14:03:50
Json de PHP a Imagen Kubelo Gráficos 5 20-06-2014 10:05:59
Como consumir Rest Service que retorna cadena en formato JSON desde delphi 7 JuanPa1 Internet 0 20-12-2013 19:07:20
Fecha JSON. BuenaOnda Varios 4 27-11-2011 19:46:27


La franja horaria es GMT +2. Ahora son las 08:46:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi