As aplicações são guardadas em conjunto com a base de dados numa área
isolada (sandbox) no entanto podes fazer uma cópia da base de dados em
runtime para a área "documents" que no caso do Android representa a raíz do
cartão SD.
No caso do iOS representa uma área reservada de documentos dentro da
própria sandbox e terás de preparar o xml para esse efeito (depois via
iTunes consegues chegar ao ficheiro).

2013/1/22 Luis Costa <[email protected]>

> Na generalidade, onde é que as aplicações são guardadas. É que não consigo
> encontrar a que criei em nenhuma pasta para ver a base de dados que é
> suposto estar criada e que fazendo um trace diz que não existe
>
>
> On Tue, Jan 22, 2013 at 3:48 PM, Hugo Ferreira <[email protected]>wrote:
>
>> Sim, é preciso permissão de leitura/escrita no SD (podes configurar isto
>> via FB ou via xml).
>>
>>
>> 2013/1/22 Luis Costa <[email protected]>
>>
>>> Boas, continuando neste tópico.
>>> Já tenho a app criada, mas não me está a escrever na BD. É necessário
>>> algum tipo de permissões no tablet para tal ?
>>>
>>> O meu código de mysql:
>>>
>>>
>>> private var sqlc:SQLConnection = new SQLConnection();
>>> // sqlc is an SQLStatment which we need to execute our sql commands
>>> private var sqls:SQLStatement = new SQLStatement();
>>> // ArrayCollection used as a data provider for the datagrid. It has to
>>> be bindable so that data in datagrid changes automatically when we change
>>> the ArrayCollection
>>> [Bindable]
>>> private var dp:ArrayCollection = new ArrayCollection();
>>>
>>> // function we call at the begining when application has finished
>>> loading and bulding itself
>>> private function start():void
>>> {
>>>     // first we need to set the file class for our database (in this
>>> example test.db). If the Database doesn't exists it will be created when we
>>> open it.
>>>     var db:File =
>>> File.applicationStorageDirectory.resolvePath("booksapp.db");
>>>     // after we set the file for our database we need to open it with
>>> our SQLConnection.
>>>     sqlc.openAsync(db);
>>>     // we need to set some event listeners so we know if we get an sql
>>> error, when the database is fully opened and to know when we recive a
>>> resault from an sql statment. The last one is uset to read data out of
>>> database.
>>>     sqlc.addEventListener(SQLEvent.OPEN, db_opened);
>>>     sqlc.addEventListener(SQLErrorEvent.ERROR, error);
>>>     sqls.addEventListener(SQLErrorEvent.ERROR, error);
>>>     sqls.addEventListener(SQLEvent.RESULT, resault);
>>>
>>> }
>>>
>>> private function db_opened(e:SQLEvent):void
>>> {
>>>     // when the database is opened we need to link the SQLStatment to
>>> our SQLConnection, so that sql statments for the right database.
>>>     // if you don't set this connection you will get an error when you
>>> execute sql statment.
>>>     sqls.sqlConnection = sqlc;
>>>     // in property text of our SQLStatment we write our sql command. We
>>> can also combine sql statments in our text property so that more than one
>>> statment can be executed at a time.
>>>     // in this sql statment we create table in our database with name
>>> "test_table" with three columns (id, first_name and last_name). Id is an
>>> integer that is auto incremented when each item is added. First_name and
>>> last_name are columns in which we can store text
>>>     // If you want to know more about sql statments search the web.
>>>     sqls.text = "CREATE TABLE IF NOT EXISTS books_table ( id INTEGER
>>> PRIMARY KEY AUTOINCREMENT, title TEXT,author TEXT,year TEXT, spot TEXT,
>>> borrowed TEXT, readed TEXT, avaliation TEXT)";
>>>     // after we have connected sql statment to our sql connection and
>>> writen our sql commands we also need to execute our sql statment.
>>>     // nothing will change in database until we execute sql statment.
>>>     sqls.execute();
>>>     //Test on Insert
>>>     sqls.text = "INSERT INTO books_table
>>> VALUES('11','22','33','44','55','66','77')";
>>>     sqls.execute();
>>>     // after we load the database and create the table if it doesn't
>>> already exists, we call refresh method which i have created to populate our
>>> datagrid
>>>     refresh();
>>> }
>>> // function to add item to our database
>>> private function addItem(title:String ,author:String ,year:String ,
>>> spot:String, borrowed:String, readed:String , avaliation:String):void
>>> {
>>>     // in this sql statment we add item at the end of our table with
>>> values first_name.text in column first_name and last_name.text for column
>>> last_name
>>>     sqls.text = "INSERT INTO books_table
>>> VALUES('"+title+"','"+author+"','"+year+"','"+spot+"','"+borrowed+"','"+readed+"','"+avaliation+"')";
>>>     sqls.execute();
>>>
>>>     refresh();
>>> }
>>>
>>> // function to call when we want to refresh the data in datagrid
>>> private function refresh(e:TimerEvent = null):void
>>> {
>>>     // timer object which we need if sql statment is still executing so
>>> that we can try again after 10 milliseconds.
>>>     var timer:Timer = new Timer(10,1);
>>>     timer.addEventListener(TimerEvent.TIMER, refresh);
>>>
>>>     if ( !sqls.executing )// we need to check if our sql statment is
>>> still executing our last sql command. If so we use Timer to try again in 10
>>> milliseconds. If we wouldn't check we could get an error because
>>> SQLStatment can't execute two statments at the same time.
>>>     {
>>>         // sql statment which returns all the data from our
>>> "test_table". To retrive only data from first_name and last_name columns we
>>> would use "SELECT first_name,last_name FROM test_table"
>>>         sqls.text = "SELECT * FROM books_table"
>>>         sqls.execute();
>>>     }
>>>     else
>>>     {
>>>         timer.start();
>>>     }
>>> }
>>>
>>> // method that gets called if we recive some resaults from our sql
>>> commands.
>>> //this method would also get called for sql statments to insert item and
>>> to create table but in this case sqls.getResault().data would be null
>>> private function resault(e:SQLEvent):void
>>> {
>>>     // with sqls.getResault().data we get the array of objects for each
>>> row out of our database
>>>     var data:Array = sqls.getResult().data;
>>>     // we pass the array of objects to our data provider to fill the
>>> datagrid
>>>     dp = new ArrayCollection(data);
>>> }
>>>
>>> // method to remove row from database.
>>> private function remove(selIndex:Number):void
>>> {
>>>     // sql statment to delete from our test_table the row that has the
>>> same number in number column as our selected row from datagrid
>>>     sqls.text = "DELETE FROM books_table WHERE id="+dp[selIndex].id;
>>>     sqls.execute();
>>>     refresh();
>>> }
>>> // method which gets called when we recive an error  from sql connection
>>> or sql statment and displays the error in the alert
>>> private function error(e:SQLErrorEvent):void
>>> {
>>>
>>> }// ActionScript file
>>>
>>>
>>> 2013/1/21 Luis Costa <[email protected]>
>>>
>>>> São os meus primeiros passos em programar para Android, todos as dicas
>>>> são bem vindas :-)
>>>>
>>>>
>>>> 2013/1/21 Hugo Ferreira <[email protected]>
>>>>
>>>>> OK.
>>>>> Outra coisa importante a ter em atenção: Cache de dados.
>>>>> Pequenas tabelas de dados que não sejam alvo de alterações frequentes
>>>>> e que são de consulta frequente, deverão ficar em memória, poupando o
>>>>> acesso ao cartão SD, no entanto isto tem de ser feito com peso e medida
>>>>> pois como bem sabemos, a memória é um recurso escasso :)
>>>>>
>>>>> Programar "qualquer um" faz mas desenvolver uma aplicação com pinta :)
>>>>> (funcionalidades completas e úteis e ao mesmo tempo rápida pode-se tornar
>>>>> um grande desafio e a cereja no topo de bolo é faze-lo com um código de
>>>>> fácil legibilidade e manutenção).
>>>>>
>>>>>
>>>>>
>>>>> No dia 21 de Janeiro de 2013 à36 18:48, Luis Costa <
>>>>> [email protected]> escreveu:
>>>>>
>>>>> É apenas uma biblioteca, mas quando esta app ficar boa depois passo
>>>>>> para outras secalhar mais pesadas.
>>>>>> Vou optar por ver como gravar os dados no SQLite.
>>>>>>
>>>>>>
>>>>>> 2013/1/21 Hugo Ferreira <[email protected]>
>>>>>>
>>>>>>> Boa tarde Luís.
>>>>>>>
>>>>>>> Se queres guardar um grande volume de dados no cartão SD, recomendo
>>>>>>> o uso do SQLite mas atenção que o acesso ao cartão é lento pelo que aqui
>>>>>>> toda e qualquer técnica de tunning deverá ser aplicada.
>>>>>>>
>>>>>>> Posso te dizer que numa das minhas primeiras aplicações nos
>>>>>>> marketplaces chegou a demorar mais de 5 segundos ao carregar dados
>>>>>>> auxiliares no arranque, após a bd ter ganho um grande volume de dados. 
>>>>>>> Após
>>>>>>> estudar e aplicar todas as técnicas de tunning de sqlite, passou a 
>>>>>>> demorar
>>>>>>> microsegundos.
>>>>>>>
>>>>>>> O Google aqui é teu amigo para descobrires como usar o SQLite e como
>>>>>>> aplicar estas técnicas logo de ínicio.
>>>>>>>
>>>>>>> Se quiseres apenas guardar variáveis (por exemplo para o estado de
>>>>>>> um jogo), então podes usar um processo menos pesado como o shared 
>>>>>>> object.
>>>>>>>
>>>>>>>
>>>>>>> Cumprimentos,
>>>>>>> Hugo.
>>>>>>>
>>>>>>>
>>>>>>> No dia 21 de Janeiro de 2013 à44 18:33, Luis Costa <
>>>>>>> [email protected]> escreveu:
>>>>>>>
>>>>>>>> Boas pessoal,
>>>>>>>> Estou a fazer a minha primeira experiência de aplicação para
>>>>>>>> Android com Adobe Flash Builder,
>>>>>>>> Qual a melhor maneira de guardar os dados no Android ? Mysql ?
>>>>>>>> Alguém sabe de um bom tutorial para estar parte ?
>>>>>>>> Cumprimentos
>>>>>>>>
>>>>>>>> --
>>>>>>>> Luís Medeiro Costa
>>>>>>>>
>>>>>>>> Flex Front-End Developer
>>>>>>>> URL: http://www.luiscostaweb.com/
>>>>>>>> E-mail: [email protected]
>>>>>>>> MSN: [email protected]
>>>>>>>> Twitter: http://twitter.com/LTostas
>>>>>>>>
>>>>>>>> --
>>>>>>>> Recebeu esta mensagem porque está inscrito no grupo "Mailing List
>>>>>>>> da Comunidade Portuguesa de Rich Internet Applications -
>>>>>>>> www.riapt.org" dos Grupos do Google.
>>>>>>>> Para publicar uma mensagem neste grupo, envie um e-mail para
>>>>>>>> [email protected].
>>>>>>>> Para anular a inscrição neste grupo, envie um e-mail para
>>>>>>>> [email protected].
>>>>>>>> Para ver mais opções, visite este grupo em
>>>>>>>> http://groups.google.com/group/riapt?hl=pt-PT.
>>>>>>>>
>>>>>>>
>>>>>>>  --
>>>>>>> Recebeu esta mensagem porque está inscrito no grupo "Mailing List da
>>>>>>> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org"
>>>>>>> dos Grupos do Google.
>>>>>>> Para publicar uma mensagem neste grupo, envie um e-mail para
>>>>>>> [email protected].
>>>>>>> Para anular a inscrição neste grupo, envie um e-mail para
>>>>>>> [email protected].
>>>>>>> Para ver mais opções, visite este grupo em
>>>>>>> http://groups.google.com/group/riapt?hl=pt-PT.
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Luís Medeiro Costa
>>>>>>
>>>>>> Flex Front-End Developer
>>>>>> URL: http://www.luiscostaweb.com/
>>>>>> E-mail: [email protected]
>>>>>> MSN: [email protected]
>>>>>> Twitter: http://twitter.com/LTostas
>>>>>>
>>>>>> --
>>>>>> Recebeu esta mensagem porque está inscrito no grupo "Mailing List da
>>>>>> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org"
>>>>>> dos Grupos do Google.
>>>>>> Para publicar uma mensagem neste grupo, envie um e-mail para
>>>>>> [email protected].
>>>>>> Para anular a inscrição neste grupo, envie um e-mail para
>>>>>> [email protected].
>>>>>> Para ver mais opções, visite este grupo em
>>>>>> http://groups.google.com/group/riapt?hl=pt-PT.
>>>>>>
>>>>>
>>>>>  --
>>>>> Recebeu esta mensagem porque está inscrito no grupo "Mailing List da
>>>>> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org"
>>>>> dos Grupos do Google.
>>>>> Para publicar uma mensagem neste grupo, envie um e-mail para
>>>>> [email protected].
>>>>> Para anular a inscrição neste grupo, envie um e-mail para
>>>>> [email protected].
>>>>> Para ver mais opções, visite este grupo em
>>>>> http://groups.google.com/group/riapt?hl=pt-PT.
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Luís Medeiro Costa
>>>>
>>>> Flex Front-End Developer
>>>> URL: http://www.luiscostaweb.com/
>>>> E-mail: [email protected]
>>>> MSN: [email protected]
>>>> Twitter: http://twitter.com/LTostas
>>>>
>>>
>>>
>>>
>>> --
>>> Luís Medeiro Costa
>>>
>>> Flex Front-End Developer
>>> URL: http://www.luiscostaweb.com/
>>> E-mail: [email protected]
>>> MSN: [email protected]
>>> Twitter: http://twitter.com/LTostas
>>>
>>> --
>>> Recebeu esta mensagem porque está inscrito no grupo "Mailing List da
>>> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org"
>>> dos Grupos do Google.
>>> Para publicar uma mensagem neste grupo, envie um e-mail para
>>> [email protected].
>>> Para anular a inscrição neste grupo, envie um e-mail para
>>> [email protected].
>>> Para ver mais opções, visite este grupo em
>>> http://groups.google.com/group/riapt?hl=pt-PT.
>>>
>>
>>  --
>> Recebeu esta mensagem porque está inscrito no grupo "Mailing List da
>> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org" dos
>> Grupos do Google.
>> Para publicar uma mensagem neste grupo, envie um e-mail para
>> [email protected].
>> Para anular a inscrição neste grupo, envie um e-mail para
>> [email protected].
>> Para ver mais opções, visite este grupo em
>> http://groups.google.com/group/riapt?hl=pt-PT.
>>
>
>
>
> --
> Luís Medeiro Costa
>
> Flex Front-End Developer
> URL: http://www.luiscostaweb.com/
> E-mail: [email protected]
> MSN: [email protected]
> Twitter: http://twitter.com/LTostas
>
> --
> Recebeu esta mensagem porque está inscrito no grupo "Mailing List da
> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org" dos
> Grupos do Google.
> Para publicar uma mensagem neste grupo, envie um e-mail para
> [email protected].
> Para anular a inscrição neste grupo, envie um e-mail para
> [email protected].
> Para ver mais opções, visite este grupo em
> http://groups.google.com/group/riapt?hl=pt-PT.
>

-- 
Recebeu esta mensagem porque está inscrito no grupo "Mailing List da Comunidade 
Portuguesa de Rich Internet Applications - www.riapt.org" dos Grupos do Google.

Para publicar uma mensagem neste grupo, envie um e-mail para 
[email protected].
Para anular a inscrição neste grupo, envie um e-mail para 
[email protected].
Para ver mais opções, visite este grupo em 
http://groups.google.com/group/riapt?hl=pt-PT.

Responder a