Fórum ConexaoDelphiAndroid #560144

10/08/2016

0

Olá amigos
Gostaria de saber como se faz corretamente isso:
Tenho um aplicativo delphi android com todas as funcionalidades implementadas e funcionando, porem se o cara loga e o aplicativo fica em 2º plano ao tentar enviar as coordenadas da um erro de http:500 mas não se trata de um erro de pagina inexistente e sim da conexão que expirou.

Alguém tem um exemplo de como se faz para verificar

se a conexão existe
insira o dado
senão
conecta e depois insere o dado
Carlos Faria

Carlos Faria

Responder

Post mais votado

18/08/2016

No FDConnection existe uma opção que pode te ajudar.

Em "ResourceOptions" vc vai encontrar um parâmetro chamado "AutoReconnect". Habilite ele para True e faça o teste.

Mateus Carvalho

Mateus Carvalho
Responder

Gostei + 1

Mais Posts

18/08/2016

Carlos Faria

Estou fazendo um testes , troquei todos os componentes dbexpress (sqldatabase por firedac ) e configurei a propriedade , vou fazer um teste agora e retorno. Mas por hora obrigado
Responder

Gostei + 0

18/08/2016

Carlos Faria

Continua do mesmo jeito

http/1.1 403 session has expired.
Responder

Gostei + 0

18/08/2016

Carlos Faria

Esse é o metodo usado para inserir o registo o que não estou sabendo fazer é verificar la no servidor datasnap se a conexao esta aberta

procedure TfrmMain.ListBoxItem1Click(Sender: TObject);
var
  qtl, login, user, lat, long: string;
  A: string;
  B: string;
  x: string;
  y: string;
  clientrest: TServerMethods1Client;
  retInsert: integer;

begin

  LocationSensor1.Active := true;

  A := LocationSensor1.Sensor.Latitude.ToString;
  B := LocationSensor1.Sensor.Longitude.ToString;
  x := StringReplace(A, ',', '.', [rfReplaceAll, rfIgnoreCase]);
  y := StringReplace(B, ',', '.', [rfReplaceAll, rfIgnoreCase]);

  qtl := x + ' ' + y;
  login := v_nr_matricula;
  user := '';
  lat := x;
  long := y;

 
//Aqui é server metodos do datasnap 

    if clientrest = nil then
      clientrest := TServerMethods1Client.Create
        (ClientModule1.DSRestConnection1);
    retInsert := clientrest.insertQTL_integer(qtl, login, user, lat, long);
    if retInsert > -1 then
      ShowMessage('Localização enviada !' + ''#13'' +
        'Aguarde a confirmação via Rede Rádio' + ''#13'' + 'Cordenadas : ' + x
        + ' ' + y)
    else
      ShowMessage
        ('Erro ao enviar a localização: Verifique sua conexão com a internet... ');



end;
Responder

Gostei + 0

18/08/2016

Carlos Faria

Ou talvez esteja aqui o erro , esse método esta dentro do serverMetodos do datasnap , seria preciso antes verificar se existe uma conexao e abri-la e sim como fazer ?


function TServerMethods1.insertQtl_Integer(qtl, moto, Userid, lat,long: string): Integer;
begin

 Result := -1 ;
 with  Fqry_QTL do
 begin
   close ;
   sql.Clear ;
   SQL.Add('insert into tb_QTL (Qtl, Nm_Login,userid,Ds_latitude,Ds_Longitude) values (:Qtl, :Nm_Login,:userid,:Ds_latitude,:Ds_Longitude)') ;
   ParamByName('qtl').AsString := Qtl ;
   ParamByName('nm_login').AsString := moto;
   ParamByName('userid').AsString := userid;
   ParamByName('ds_latitude').AsString := lat;
   ParamByName('ds_longitude').AsString := long;
   ExecSQL;
   Result := 0 ;
 end;



end;
Responder

Gostei + 0

25/08/2016

Mateus Carvalho

Regis, desculpa a demora.

Eu crie uma aplicação simples aqui, e está normal. Você poderia informar-me qual os componentes que vc está utilizando?
Responder

Gostei + 0

25/08/2016

Carlos Faria

la no DataSnap componentes da paleta firedac

No projeto estou usando um acesso direto ao servermetodos como mostra o código abaixo
Aqui é la no DataSnap no servermetodos

########################Funçao que está no serverMetodos do datasnap ##############################################################

function TServerMethods1.insertQtl_Integer(qtl, moto, Userid, lat,long: string): Integer;
begin
 
 Result := -1 ;
 with  Fqry_QTL do
 begin
   close ;
   sql.Clear ;
   SQL.Add('insert into tb_QTL (Qtl, Nm_Login,userid,Ds_latitude,Ds_Longitude) values (:Qtl, :Nm_Login,:userid,:Ds_latitude,:Ds_Longitude)') ;
   ParamByName('qtl').AsString := Qtl ;
   ParamByName('nm_login').AsString := moto;
   ParamByName('userid').AsString := userid;
   ParamByName('ds_latitude').AsString := lat;
   ParamByName('ds_longitude').AsString := long;
   ExecSQL;
   Result := 0 ;
 end;
 


####################################################################################################
///Aqui no projeto mesmo através da classe TServerMethods1Client;

 clientrest: TServerMethods1Client;
  retInsert: integer;
 
begin
 
  LocationSensor1.Active := true;
 
  A := LocationSensor1.Sensor.Latitude.ToString;
  B := LocationSensor1.Sensor.Longitude.ToString;
  x := StringReplace(A, ',', '.', [rfReplaceAll, rfIgnoreCase]);
  y := StringReplace(B, ',', '.', [rfReplaceAll, rfIgnoreCase]);
 
  qtl := x + ' ' + y;
  login := v_nr_matricula;
  user := '';
  lat := x;
  long := y;
 
begin   
 
    if clientrest = nil then
      clientrest := TServerMethods1Client.Create
        (ClientModule1.DSRestConnection1);
    retInsert := clientrest.insertQTL_integer(qtl, login, user, lat, long);
    if retInsert > -1 then
      ShowMessage('Localização enviada !' + ''#13'' +
        'Aguarde a confirmação via Rede Rádio' + ''#13'' + 'Cordenadas : ' + x
        + ' ' + y)
    else
      ShowMessage
        ('Erro ao enviar a localização: Verifique sua conexão com a internet... ');
Responder

Gostei + 0

26/08/2016

Mateus Carvalho

O erro 500 representa que a execução do método falhou, e junto com esse erro, vem descrito o motivo. Você pode enviar um print ou o que vem descrito nessa mensagem?




Link com mais informações sobre os erros mais populares: http://docwiki.embarcadero.com/RADStudio/XE8/en/DataSnap_REST



Att!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar