Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   FireMonkey (https://www.clubdelphi.com/foros/forumdisplay.php?f=50)
-   -   Json nulo con REST y android (https://www.clubdelphi.com/foros/showthread.php?t=91194)

NicolasP 29-11-2016 22:53:59

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

jhonny 29-11-2016 23:21:27

¿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.

NicolasP 02-12-2016 14:06:58

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.

jhonny 02-12-2016 16:28:39

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/

NicolasP 03-12-2016 23:44:07

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 .:confused:


La franja horaria es GMT +2. Ahora son las 15:00:23.

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