Pra falar a vdd não. Estou me guiando pelos returns, com eles eu vejo se o try ou catch estão rodando, mas tipo, como vc usa os souts?
por falar de return, faz assim:
retorno = "msg....."
e depois do ultimo catch
, vc faz
} catch (....){
}
return retorno;
}
Primeiro vc tem que saber onde vc começa a ler o banco de dados, aí vc coloca lá:
System.out.println("lendo arquivo: " + caminho_do_arquivo);
Tô fazendo os returns exatamente assim e imprimo num Toast em outra classe.
Tbm tô fazendo assim depois dos catchs.
Quanto à leitura do banco, tenho a classe ListarAlunos, nela eu tenho a relação de todos os alunos cadastrados. É assim que estou sabendo se o banco salvo está sendo importado pro sistema.
Na classe do Banco de Dados tenho os métodos de Exportação e Importação em que os resultados exibo nas classes BackupBanco e UploadBanco.
No caso, o sout que vc fala, seria colocado nos métodos Exprotar e Importar que estão no Banco?
Eles estão como vc colocou no método IMPORTAR.
Quando eu rodo os Métodos, eles dão esses resultados no run:
W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@ac2c01c
W/System: A resource failed to call close.
W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@4e88cc9
W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@c7985d8
E/tag: /storage/emulated/0/BACKUP_APP_ESCOLA/ARQUIVO_DE_BACKUP (No such file or directory)
D/OpenGLRenderer: endAllActiveAnimators on 0x89dae600 (RippleDrawable) with handle 0x8a129970
W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@55ebeed
Essa linha quando eu faço a Exportação:
W/System: A resource failed to call close.
E essa linha quando faço a Importação:
E/tag: /storage/emulated/0/BACKUP_APP_ESCOLA/ARQUIVO_DE_BACKUP (No such file or directory)
Onde dos Métodos vc quer colocar os soults?
lê os arquivos daqui:
/storage/emulated/0/BACKUP_APP_ESCOLA/ARQUIVO_DE_BACKUP (No such file or directory)
ve o que vai retornar
Desculpa, orochimaru, mas não tô sabendo como implementar isso, vai que é algo tão trivial, mas não to entendendo oq vc ta falando…
vou te mandar um dm.
Consegui!!
Consegui fazer a importação/exportação do banco de dados SQLite da memória interna para a externa e vice-versa.
Os dois métodos abaixo faz a msm coisa.
OBS: Na pasta /databases/
tem 3 arquivos e eu só consegui resgatar o banco de dados por completo quando copiei os 3 arquivos tanto para a memória externa como para interna. Nesse caso eu repeti as linhas para cada arquivo. Só assim que eu vi os alunos cadastrados de volta na minha lista (O único arquivo que mudava de tamanho com os cadastros dos alunos e que abriu o banco exibindo os alunos cadastrados na lista foi o arquivo Escola.db-wal, por isso que copiar todos os arquivos, vai que um tem relação com o outro neh).
public void copiarBanco(){
File pastaDestino = new File(Environment.getExternalStorageDirectory() + "/BACKUP_APP_ESCOLA/");
// NA PASTA /databases/ CONTÉM 3 ARQUIVOS: Escola.db, Escola.db-shm e Escola.db-wal
// ENTÃO COPIE TODOS, UM POR UM, PARA A MEMÓRIA EXTERNA
// SÓ ASSIM QUE (AO FAZER O INVERSO, COPIAR DA MEMÓRIA EXTERNA PARA A INTERNA) EU PUDE VER OS ALUNOS CADASTRADOS NOVAMENTE NA LISTA DO MEU SISTEMA
File arquivoOrigem = new File("//data/data/sistema.escola/databases/Escola.db");
File arquivoDestino = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/BACKUP_APP_ESCOLA/Escola_backup.db");
if(! pastaDestino.exists()){
pastaDestino.mkdir();
try{
InputStream input = new FileInputStream(arquivoOrigem);
OutputStream output = new FileOutputStream(arquivoDestino);
byte[] buffer = new byte[1024];
int length;
while((length = input.read(buffer)) > 0){
output.write(buffer, 0, length);
}
input.close();
output.close();
Toast.makeText(MainActivity.this, "EXPORTAÇÃO REALIZADA COM SUCESSO!", Toast.LENGTH_SHORT).show();
}
catch(IOException e){
Toast.makeText(MainActivity.this, "EXPORTAÇÃO NÃO REALIZADA!", Toast.LENGTH_SHORT).show();
}
}
}
Segunda forma:
public void copiarBanco(){
File pastaDestino = new File(Environment.getExternalStorageDirectory() + "/BACKUP_APP_ESCOLA/");
File arquivoOrigem = new File("//data/data/sistema.escola/databases/Escola.db");
File arquivoDestino = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/BACKUP_APP_ESCOLA/Escola_backup.db");
try {
if(!pastaDestino.exists()){
pastaDestino.mkdir();
}
FileChannel input = new FileInputStream(arquivoOrigem).getChannel();
FileChannel Output = new FileOutputStream(arquivoDestino).getChannel();
Output.transferFrom(input, 0, input.size());
input.close();
Output.close();
Toast.makeText(MainActivity.this, "EXPORTAÇÃO REALIZADA COM SUCESSO!", Toast.LENGTH_SHORT).show();
}
catch (IOException e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, "EXPORTAÇÃO NÃO REALIZADA!", Toast.LENGTH_SHORT).show();
}
}
Um DETALHE MAIS DO QUE FUNDAMENTAL é colocar as permissões no Manifest:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
(E não colocar as permissões, ele nem cria a pasta! (E eu quebrando a cabeça com o mkdir )
Orochimaru, mt obrigada pela atenção! Fica com Deus!
Espero que esse tópico ajude mais pessoas