Cita:
Empezado por jhonalone
Gracias de nuevo por el código.
Lo puse en OnCreate y compila bien, pero me tira la app en el arranque.
Llevo un rato dando vueltas, pero no consigo averiguar la causa. Es una aplicación Android14
Un saludo.
|
Que onda amigazo... tu app se rompe por que Android emite una excepción de tipo ANR "Android No Responde" al ejecutar procesos pesados en el hilo principal, te sugiero usar siempre Threads para procesos pesados NO VISUALES en android como consumir webservices, peticiones hhtp, etc.
Lo qe yo haría en tu caso es:
Código Delphi
[-] uses
System.SysUtils, System.Net.HttpClient, System.DateUtils;
function HoraLocalManipulada: Boolean;
var
HttpClient: TNetHTTPClient;
t0, t1: TDateTime;
Respuesta: string;
HoraServidor: TDateTime;
HoraLocalAprox: TDateTime;
Diferencia: Double;
FS: TFormatSettings;
begin
Result := False;
HttpClient := TNetHTTPClient.Create(nil);
try
try
t0 := Now;
Respuesta := HttpClient.Get('https://intitec.com/debug/getahora.php').ContentAsString(TEncoding.UTF8);
Respuesta := Trim(Respuesta);
t1 := Now;
FS := TFormatSettings.Create;
FS.DateSeparator := '-';
FS.TimeSeparator := ':';
FS.ShortDateFormat := 'yyyy-mm-dd';
FS.ShortTimeFormat := 'hh:nn:ss';
if not TryStrToDateTime(Respuesta, HoraServidor, FS) then
Exit;
HoraLocalAprox := (t0 + t1) / 2;
Diferencia := SecondsBetween(HoraServidor, HoraLocalAprox);
Result := Abs(Diferencia) > 60;
except
Result := False;
end;
finally
HttpClient.Free;
end;
end;
procedure Algo;
var
Thread: TThread;
begin
Thread:= TThread.CreateAnonymousThread(procedure
var
HraManipulada: boolean;
begin
HraManipulada:= HoraLocalManipulada;
TThread.Synchronize(nil,
procedure
begin
if HraManipulada = True then
ShowMessage('No le mueva a la hora si no le sabe :P');
end);
end);
Thread.FreeOnTerminate:= True;
Thread.Start;
end;