Avisos

Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 27/01/12, 08:58:17
Array

[xs_avatar]
marquake marquake no está en línea
Miembro del foro
· Votos compra/venta: (1)
 
Fecha de registro: ene 2011
Mensajes: 275
Modelo de smartphone: Samsung Galaxy S I9000
Tu operador: Orange
noticia Generar apk con base de datos sqlite

Hola una vez más!

Tengo una pequeña duda. Estoy haciendo una aplicación para android y mi aplicación utiliza base de datos sqlite, la base de datos tiene un tamaño de unos 3 megas.

El caso es que quiero probarla en mi teléfono y cuando genero la aplicación me genera un apk de 280 Kb, entonces ahí no va ni de coña la base de datos. No se como hacer para que vayan las dos juntas.

He preguntado a algún colega y me ha dicho que se puede crear la base de datos en ejecución la primera vez y eso lo sabia, en el metodo del datahelper pero claro... como voy a hacer eso si para mi aplicación tendría que hacer como 4000 inserts. Además, lo de crear la base de datos es para que cuando de un problema de que no la encuentra no pete la aplicación...

Como hago esto?

Gracias!!!
__________________
BE GRANIZADO MY FRIEND
Responder Con Cita


  #2  
Viejo 27/01/12, 17:21:54
Array

[xs_avatar]
Pikoh Pikoh no está en línea
Miembro del foro
 
Fecha de registro: sep 2011
Mensajes: 53
Tu operador: Pepephone

Yo te cuento como lo he hecho yo en alguna ocasion. Es un poco cutre pero funciona. Yo incluyo los datos de la bbdd en un fichero de texto en csv y en la primera ejecucion creo la base sqlite y meto todos los datos. Se que hay alguna otra manera,pero a mi esta me ha dado buenos resultados si no hay una cantidad excesiva de registros.

Enviado desde mi Galaxy Nexus usando Tapatalk
Responder Con Cita
  #3  
Viejo 28/01/12, 11:34:17
Array

[xs_avatar]
pmaicas pmaicas no está en línea
Desarrollador
 
Fecha de registro: dic 2008
Mensajes: 1,299

Mete la base de datos en assets, y en la primera ejecucion la copias a la memoria o a la sdcard, puedes aprovechar para comprimirla y que ocupe menos espacio (en assets).

Tambien la puedes tener en un servidor en internet, y la bajas a la primera ejecucion.
__________________
Saludos
-Pedro-
http://www.maicas.net/ (desarrollo de software)
http://droid.maicas.net/ (solo android)
Responder Con Cita
  #4  
Viejo 28/01/12, 23:56:14
Array

[xs_avatar]
marquake marquake no está en línea
Miembro del foro
· Votos compra/venta: (1)
 
Fecha de registro: ene 2011
Mensajes: 275
Modelo de smartphone: Samsung Galaxy S I9000
Tu operador: Orange
 Cita: Originalmente Escrito por Pikoh Ver Mensaje
Yo te cuento como lo he hecho yo en alguna ocasion. Es un poco cutre pero funciona. Yo incluyo los datos de la bbdd en un fichero de texto en csv y en la primera ejecucion creo la base sqlite y meto todos los datos. Se que hay alguna otra manera,pero a mi esta me ha dado buenos resultados si no hay una cantidad excesiva de registros.

Enviado desde mi Galaxy Nexus usando Tapatalk
esa es la ultima opcion que queria usar... como dices tu, es un poco mas cutre y si no consigo otra forma usare esa. queria evitarlo porque mi base de datos tiene 4000 registros y ocupa entre 3 y 4 megas.

gracias!

Enviado desde mi GT-I9000 usando Tapatalk
__________________
BE GRANIZADO MY FRIEND
Responder Con Cita
  #5  
Viejo 29/01/12, 00:07:05
Array

[xs_avatar]
marquake marquake no está en línea
Miembro del foro
· Votos compra/venta: (1)
 
Fecha de registro: ene 2011
Mensajes: 275
Modelo de smartphone: Samsung Galaxy S I9000
Tu operador: Orange
 Cita: Originalmente Escrito por pmaicas Ver Mensaje
Mete la base de datos en assets, y en la primera ejecucion la copias a la memoria o a la sdcard, puedes aprovechar para comprimirla y que ocupe menos espacio (en assets).

Tambien la puedes tener en un servidor en internet, y la bajas a la primera ejecucion.
buff... mirare por internet para ver que es lo de assets, que no lo de, aunque me suena.

y lo que dices de meterlo en la tarjeta...¿tengo que cambiar la ruta en la aplicacion entonces, no?
si meto mi aplicacion en el market, tengo que hacer que el usuario haga eso? es que sino me sigue pareciendo mejor forma lo de ejecutarlo desde el oncreate del databasehelper...

le dare una vuelta, gracias!


Enviado desde mi GT-I9000 usando Tapatalk
__________________
BE GRANIZADO MY FRIEND
Responder Con Cita
  #6  
Viejo 30/01/12, 20:19:23
Array

[xs_avatar]
marquake marquake no está en línea
Miembro del foro
· Votos compra/venta: (1)
 
Fecha de registro: ene 2011
Mensajes: 275
Modelo de smartphone: Samsung Galaxy S I9000
Tu operador: Orange
No puede ser tan dificil.

 Cita: Originalmente Escrito por Pikoh Ver Mensaje
Yo te cuento como lo he hecho yo en alguna ocasion. Es un poco cutre pero funciona. Yo incluyo los datos de la bbdd en un fichero de texto en csv y en la primera ejecucion creo la base sqlite y meto todos los datos. Se que hay alguna otra manera,pero a mi esta me ha dado buenos resultados si no hay una cantidad excesiva de registros.

Enviado desde mi Galaxy Nexus usando Tapatalk
Hola Pikoh,

estoy empezando a ver la cosa un poco mal... me podrías decir como haces eso, me refiero a la conversión del archivo. Yo se hacer insert pero exactamente tu que es lo que haces? abres el fichero y creas un INSERT?

Te agradecería que me echases una mano
__________________
BE GRANIZADO MY FRIEND
Responder Con Cita
  #7  
Viejo 31/01/12, 08:41:00
Array

[xs_avatar]
Pikoh Pikoh no está en línea
Miembro del foro
 
Fecha de registro: sep 2011
Mensajes: 53
Tu operador: Pepephone

Claro que te echaré una mano Está tarde publico el código que utilizo para que veas como hacerlo. De todas maneras, como ya te he dicho nunca la he utilizado con mas de 300 registros y no se cuanto tiempo tardará el proceso con 4000 como comentas, pero al fin y al cabo es un proceso que solo se utiliza en la primera ejecucion.

Enviado desde mi Galaxy Nexus usando Tapatalk
Responder Con Cita
  #8  
Viejo 31/01/12, 08:47:29
Array

[xs_avatar]
marquake marquake no está en línea
Miembro del foro
· Votos compra/venta: (1)
 
Fecha de registro: ene 2011
Mensajes: 275
Modelo de smartphone: Samsung Galaxy S I9000
Tu operador: Orange
Perfecto!!

Perfecto! estaré esperando tu comentario como agua de mayo

La verdad es que tampoco creo que tarde mucho, y si tarda mucho me invento un "espere mientras la aplicación se instala", jajajaja!!

Gracias!!

PD: Esto no significa que no esté abierto a más opciones... si alguno tiene algo en el tintero que lo eche, que eso dentro no es bueno
__________________
BE GRANIZADO MY FRIEND
Responder Con Cita
  #9  
Viejo 31/01/12, 19:27:08
Array

[xs_avatar]
Pikoh Pikoh no está en línea
Miembro del foro
 
Fecha de registro: sep 2011
Mensajes: 53
Tu operador: Pepephone

Bueno, al lio:

lo primero es meter el archivo con los datos en formato csv en res/raw. En mi caso separo los campos conun punto y coma y los registros van uno en cada linea.

Te pego ahora el codigo que uso en el dbhelper

Código:
public class dbHelper extends SQLiteOpenHelper{
    private static final String DATABASE_NAME = "tubase.db" ;
    private static final int DATABASE_VERSION = 1;
    InputStream inputStream;
    public dbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);

        inputStream = context.getResources().openRawResource(R.raw.nombreDelCsv);

    }

@Override
    public void onCreate(SQLiteDatabase db) {
      //aqui crea la tabla en tu base de datos
      importaCsv();
}

private void importaCsv(){
        String texto="";    
        String[] filas;
        String[] datos;
        

        texto=readTxt();
        filas=texto.split("\r\n");
        for(int i=0;i<filas.length;i++){
            //cada uno es un registro
            ContentValues values = new ContentValues();
            datos=filas[i].split(";");

            values.put("campo", datos[0]);
            //asi para cada campo
            db.insertOrThrow("tabla", null, values);
        }


//aqui lee el fichero y devuelve un string con lo leido
private String readTxt(){

         String s;
         
         ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
         
         int i;
      try {
       i = inputStream.read();
       while (i != -1)
          {
           byteArrayOutputStream.write(i);
           i = inputStream.read();
          }
          inputStream.close();
      } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
      
      
        s=byteArrayOutputStream.toString();
    
            return s;
        
       
    }
Bueno, es un esquema y no esta muy optimizado, pero te puede dar una idea de como funcionar. Si tienes alguna duda, preguntame y trataré de explicartelo mejor.

Un saludo
Responder Con Cita
  #10  
Viejo 31/01/12, 23:23:01
Array

[xs_avatar]
marquake marquake no está en línea
Miembro del foro
· Votos compra/venta: (1)
 
Fecha de registro: ene 2011
Mensajes: 275
Modelo de smartphone: Samsung Galaxy S I9000
Tu operador: Orange
De lujo!

De lujo Pikoh!

le acabo de echar un vistazo y está guay! ahora ya se me ha hecho un poco tarde pero en cuanto tenga un rato le voy a dar al codigamen a ver si me quito la base de datos de encima, que no me esperaba que me fuese a dar tanto lío.

Ah! una cosa. Con esto puedes probar en el ordenador con el emulador pero cuando lo pases al teléfono... ¿? Tienes que meter el fichero desde fuera o cuando generas el apk lo que metas en el res/raw va dentro del apk.

Muchas gracias!!

PD: En la vida se me habría ocurrido que una cosa tan tonta como lo de la base de datos diese tanto lio...
__________________
BE GRANIZADO MY FRIEND
Responder Con Cita
  #11  
Viejo 01/02/12, 00:02:14
Array

[xs_avatar]
Pikoh Pikoh no está en línea
Miembro del foro
 
Fecha de registro: sep 2011
Mensajes: 53
Tu operador: Pepephone

Lo que metes en raw va dentro del apk,no necesitas hacer nada mas. Ya me contaras como va la cosa

Enviado desde mi Galaxy Nexus usando Tapatalk
Responder Con Cita
  #12  
Viejo 28/11/12, 23:35:52
Array

[xs_avatar]
ezpiki ezpiki no está en línea
Miembro del foro
 
Fecha de registro: feb 2008
Localización: Madrid
Mensajes: 41
Modelo de smartphone: Samsung Galaxy S

Muchas gracias Pikoh, tu forma de cargar datos me ha sido de mucha ayuda y resulta la más elegante de las opciones.
Responder Con Cita
  #13  
Viejo 29/11/12, 11:55:21
Array

[xs_avatar]
ugarte ugarte no está en línea
Miembro del foro
 
Fecha de registro: abr 2012
Mensajes: 66
Tu operador: Movistar

Yo creo que creando la base de datos primero y guardándola en assest es más sencillo.
mírate este vídeo, por el minuto 50 te dice como meter una base de datos ya creada en la aplicación aunque te recomiendo que te le veas desde el 26 para que entiendas bien el código que ha ido haciendo.

Video:
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 14:51:36 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /