fbpx

Arquivo de Configuração XML no Android com Delphi XE7

Delphi XE7 Android XMLDocument

Imagine um cenário em que sua aplicação Mobile precise conectar-se ora no IP da rede interna e ora no IP externo, e este pode ser até mesmo um IP dinâmico.

Pois bem na postagem de hoje vamos simular um arquivo de configuração capaz de passar para nossa aplicação os parâmetros de conexão a serem utilizados por ela.

XML além da NF-e

Quando falamos em XML logo nos vem em mente os arquivos de NF-e, CT-e, etc. Vale lembrar que o formato XML é apenas o formato escolhido pelos nossos órgãos reguladores para a troca de arquivos como os citados. Então para que está começando, vale a pena ler um pouco sobre XML (eXtensible Markup Language) que é um padrão de formato de arquivo muito utilizado e certamente se você ainda não teve contato com ele, um dia terá!

Arquivo XML

Criando um arquivo XML

Para criar nosso arquivo XML vamos utilizar o bloco de notas, poderia ser feito com qualquer editor de texto, digitando como abaixo:

<?xml version="1.0" encoding = "UTF-8" ?>
<config>
	<Host>127.0.0.1</Host>
	<Porta>2013</Porta>	
</config>

Salve seu arquivo com o nome de Config.xml. Agora já temos o nosso arquivo XML pronto para ser utilizado, vamos entender o proposto na postagem.

Simulação de uso

Vamos utilizar o arquivo de configuração simulando parâmetros para estabelecermos a conexão com um Servidor DataSnap Rest  feito em Delphi (faremos nas próximas postagens). Basicamente nosso arquivo contem em seus nós (xml nodes) o endereço do Host e a Porta a serem utilizadas para conectarmos.

Criando nosso APK no Delphi XE7

Vamos inciar no Delphi XE7 um nova aplicação Multi-Device em branco. Vamos inserir um ToolBar e dentro dela um Label com o Texto “Configuração com XML“.

Vamos ainda inserir diretamente no formulário: 3 Label, 2 Edit, 1 Memo, 1 Image e 1 Button. E configurá-los como abaixo:

  • Label2
    • Align -> Top
    • Text -> Host
  • Edit1
    • Align -> Top
    • Text ->”
  • Label3
    • Align -> Top
    • Text -> Porta
  • Edit2
    • Align ->Top
    • Text ->”
  • Label4
    • Align -> Top
    • Text -> Configuração
  • Memo1
    • Align -> Left
    • Enabled -> False
    • WrodWrap -> True
  • Image1
    • Align -> Client
    • MultiResBitmap -> [Escolha uma imagem a seu gosto]
  • Button1
    • Text -> Carregar

 Ao final das configurações teremos a interface de usuário muito próxima da imagem abaixo:

UI Aplicação

Agora que temos a nossa interface de usuário, vamos começar a codificar seu comportamento.

Muito prazer: TXMLDocument!

No Delphi existe um componente que nos permite de maneira muito simples manipular arquivos XML, o TXMLDocument. Sem muitas delongas vamos inserir um XMLDocument na nossa aplicação e alterar suas propriedades como segue:

  • Name -> XMLDocConfig
  • DomVendor -> ADOM XML v4

Agora vamos cuidar para que quando o usuário iniciar nossa aplicação o XML que criamos seja carregado pelo XMLDocument (XMLDocConfig). No evento OnActivate do formulário inicial vamos inserir o seguinte código:

procedure TForm1.FormActivate(Sender: TObject);
begin
  XMLDocConfig.LoadFromFile(TPath.GetDocumentsPath + PathDelim + 'config.xml');
  XMLDocConfig.Active := True;
  Edit1.Text := XMLDocConfig.DocumentElement.ChildNodes.FindNode('Host').Text;
  Edit2.Text := XMLDocConfig.DocumentElement.ChildNodes.FindNode('Porta').Text;
end;

Você pode estar se perguntando como vamos enviar este arquivo XML (Config.xml) para o dispositivo?! Pois bem, o Delphi vai se encarregar disso por nós. Para tal vamos acessar o Deployment Manager. Vá em Project -> Deployment. (Vide imagem)

Deployment Manager

Em seguida a tela abaixo será aberta, e devemos configurar alguns pontos com atenção, além é claro de informar o arquivo que será distribuído juntamente com nossa aplicação.  Confira:

Configurando Deploy

Altere a Caixa de seleção apontada na seta 1 para All Configuration – Android plattform, ou seja, as configurações serão aplicadas para Android tanto em modo Debug quanto Release.

Na seta 2 temos a função para adicionar os arquivos a serem distribuídos junto com o projeto, vamos inserir o Config.xml e configurar o item 3.

Note que no item 3 já temos o arquivo inserido, precisamos agora definir onde ele ficará no dispositivo, isso é feito no campo Remote Path, que no nosso caso vamos setar com: assets\internal, que é a zona de armazenamento interna no Android.

Nota: Em um dispositivo móvel Android, as aplicações são em Sand Box,  isso faz com que normalemente você só possa ler e gravar dados que estejam no armazenamento interno no próprio diretório da aplicação.

Olhando atentamente para a imagem você vai notar que a última coluna, Overwrite, diz respeito a quando os arquivos serão sobrepostos no caso dos mesmos já existirem, neste caso alteramos a este valor para Never, nunca, isso fará com que caso já existe um arquivo, a configuração já  seta nele não seja perdida.

Vamos rodar a aplicação para checarmos como está seu funcionamento até então. Note que as informações do arquivo já foram carregadas para dentro dos Edit como proposto… o que faremos agora é proporcionar que alterações sejam salvas, afim de que possamos mudar o “ip” ou “porta” quando necessário.

Funcionalidades: salvar e re-carregar

Vamos agora fazer com que o usuário possa gravar o conteúdo dos edits no arquivo XML propriamente dito. Faremos isso quando o usuário clicar sobre a imagem, então no evento onClick do Image1 teremos:

procedure TForm1.Image1Click(Sender: TObject);
begin
  XMLDocConfig.DocumentElement.ChildNodes.FindNode('Host').NodeValue := Edit1.Text;
  XMLDocConfig.DocumentElement.ChildNodes.FindNode('Porta').NodeValue := Edit2.Text;
  XMLDocConfig.SaveToFile(TPath.GetDocumentsPath + PathDelim + 'config.xml');
end;

Com isso já temos a aplicação alterando os dados do XML, e para conferirmos quais os dados estão nele no momento vamos carregá-lo para exibição no Memo1. Vamos codificar essa funcionalidade no clique do Botão, assim no onClick do Button1 teremos:

procedure TForm1.Button1Click(Sender: TObject);
begin
  XMLDocConfig.LoadFromFile(TPath.GetDocumentsPath + PathDelim + 'config.xml');
  XMLDocConfig.Active := True;
  Memo1.Lines := XMLDocConfig.XML;
end;

Prontinho, agora é só testar e conferir! Se tudo deu certo sua aplicação terá o funcionamento como no vídeo abaixo:

Vale lembrar que configuramos para que uma nova instalação não remova o config.xml previamente existente,  o arquivo sempre terá o último valor gravado, até que você desinstale a aplicação para e a instale novamente.

É isso… até a próxima pessoal!

 

,

Comente