Ver mensagens sem resposta | Ver tópicos ativos Hoje é 12 Nov 2019, 12:23



Responder Tópico  [ 1 Mensagem ] 
 Dica: copiando o db SQLite do assets, copyDbFromAssets() 
Autor Mensagem
Google employee
Google employee

Data de registro: 17 Jul 2011, 11:55
Mensagens: 2657
Localização: São Paulo
Mensagem Dica: copiando o db SQLite do assets, copyDbFromAssets()
Às vezes temos um db pronto e queremos fazer a distribuição no próprio apk. Uma forma é deixar o db na pasta assets e na primeira execução do app fazer a cópia para a pasta dos bancos.

Segue um código que tenho usado.


 * @author A H Gusukuma
 *         agorandroid.blogspot.com
 */
public final class DbUtils {

 public static void copyDbFromAssets(Context context, String source,
      String dest) throws IOException {

  String dbPath = context.getDatabasePath(dest).getPath();
  String path = dbPath.substring(0, dbPath.lastIndexOf("/") + 1);
  File dirDb = new File(path);
  if (!dirDb.exists()) {
   dirDb.mkdir();
  }

  AssetManager assetManager = context.getResources().getAssets();
  InputStream in = assetManager.open(source);
  OutputStream out = new FileOutputStream(dbPath);

  byte[] buffer = new byte[1024];
  int lenght;
  while ((lenght = in.read(buffer)) > 0) {
   out.write(buffer, 0, lenght);
  }
  in.close();
  out.close();
 }

 public static boolean dbExists(Context context, String dbname) {
  File db = context.getDatabasePath(dbname);
  return db.exists();
 }
 
 private DbUtils() {
 }
}
 


Segue um trecho de uma AsyncTask para executar a cópia:


  protected Void doInBackground(String... dbname) {
   try {
    DbUtils.copyDbFromAssets(getBaseContext(), dbname[0], dbname[0]);
   } catch (IOException e) {
     // problema na cópia trata o erro aqui
    e.printStackTrace();
   }
   return null;
  }
 


Na Activity, chamamos a asyncTask:

  String dbName = "meuDataBase.db";
  if (!DbUtils.dbExists(this, dbName)) {
      mAsyncTask = new MyAsyncTask(this);
      mAsyncTask.execute(dbName);
  }
 


Um bom lugar para usar essa rotina é na activity de Splash Screen, enquanto faz a cópia em background fica no splash screen.

_________________
Abraços
___________
Novo App: CalcMat - Calculadora de materiais para concreto
Blog: Agorandroid - sobre programação Android
Twitter: @Agorandroid
___________
Campanha: Facilite sua vida e a dos outros usuários
Cuide do ciclo de vida do seu tópico:
no onCreate(): seja claro, se necessário poste o código e as mensagens de erro.
no onClick(): responda às sugestões.
no onStop(): evite "ninguém?", "alguém?", etc. Procure acrescentar alguma nova informação.
no onDestroy(): resolvido o assunto, poste imediatamente a solução, e, coloque no título do primeiro post [Resolvido].


13 Abr 2015, 11:51
Perfil
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 1 Mensagem ] 

Quem está online

Usuários vendo este fórum: adenilsonsena, Aderbal Nunes, alansousa, alfredo_ej, allart, aluclinux, amos, Anakin Skywalker, andrewort, Androidthebest, ariostorecco, arnaldo.miranda, Ask Jeeves, azero, berchielli, Bitor, BMaia, boydivalor, brenno, canaville, cehills, celiapinheiro, Chanceler Supremo Finis Valorum, Chewbacca, Costa, Cr-Informática, cyzko, czambroni, dallari, danilosv, Darth Vader, DAVINCE, deborazb, digiwise, dnakamashi, eliasmachado_rj, elisa, erosvaldo, Felipe, felipe.cintra, ferrodecaju, flaviocc, flaviohssantos, flaviojps, flaviolemos, fraga, gabrielpg, Geire Robson Gadelha, Google Desktop, Gooooogle, henrique.cardoso, inesfg, ismavolk, Jaison, Javanês, joaquimfoto, Joessi2007, Josinhaz, Jota, jrsilva, juliomar, kennedyximenes, klyff, lanlan, leeeeooooooo, luciano.sml, luiz, luizcyber, luizfilipe, Luke Skywalker, Marcelo Alves, Marlosm, Marlus Dias Silva, Meticore, Michel, miguel, Moisés Souto, mrangel, neimarguerra, NeruLL, nocivus, nq6, Nute Gunray, obitow, Padawan, Paulo Bizzo, paulokiller, pilon, pjorge, rafaelmonoh, ramonsiebra, renanpl, ricardo, ricardoogliari, ricardzanella, rixargolo, robsonrg, Rodrigo, rodrigo aguiar, rogerio.alcantara, rogeriokta, rogeriopgomes, ronamore, Roney dos Santos, rotilho, Samuka, sandro, ScoobyGB, SEO Crawler, Silvio Vaz, SirBagda, srmoreira, taluna, thiaguim, tonholis, tricx16, ubiratan, unnamedd, Velhinho, vilmartr, viniciusluiz, wagner_francisco, wender, Wesleyceraso, xGambit, Zam Wesell, zenden1503 e 4 visitantes


Você não pode criar novos tópicos neste fórum
Você não pode responder tópicos neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode enviar anexos neste fórum

Procurar por:

© 2007 - 2016 Portal Android - Comunidade de Desenvolvedores Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi