Seleccionar un valor de un spinner y guardarlo en una base de datos.

1,551 views
Skip to first unread message

Fernando Garcia

unread,
Oct 9, 2014, 3:02:07 AM10/9/14
to desarrollad...@googlegroups.com
Buenas a todos:
Soy bastante nuevo en android y me faltan conocimientos en Java(todo hay que decirlo). Estoy haciendo una aplicacion en la que selecciono un valor de un Spinner y quiero que se guarde en una base de datos. Luego quiero poder leer ese valor desde cualquier otro sitio y utilizarlo.
La idea es crear una especie de datos base que no se pierdan al cerrar la aplicacion y que al abrirla los recupere y muestre la ultima opcion elegida, para luego poder actuar y hacer una u otra cosa.
He mirado el libro de "Android Programacion" de Ed Burnette , videos en youtube y estado buscando por internet, pero los ejemplos que encuentro no termino de hacerlos funcionar, en el mas sencillo de los que he visto crea una clase extendida a SQLiteOpenHelper, tal que asi:

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class AdminSQLiteOpenHelper extends SQLiteOpenHelper {

 public AdminSQLiteOpenHelper(Context context, String nombre, CursorFactory factory, int version) {
  super(context, nombre, factory, version);
 }

 @Override
 public void onCreate(SQLiteDatabase db) {
  db.execSQL("create table tabla_tono(_id int primary key, tonoelegido int)");
 }

 @Override
 public void onUpgrade(SQLiteDatabase db, int versionAnte, int versionNue) {
  db.execSQL("drop table if exists tabla_tono");
  db.execSQL("create table tabla_tono(_id int primary key, tonoelegido int)"); 
 }
}

Lo que me pasa es que no se como acceder luego a ella con el Spinner, ni guardarla para utilizarla despues con un button. El concepto es seleccionar un tono de musica del spinner y luego poder reproducirlo con un button. Tambien quiero que una vez seleccionado una opcion cuando vuelva abrir la aplicacion me salga en el spinner en vez del valor por defecto para saber que tono hay marcado.

Agradeceria cualquier tipo de sugerencia, porque estoy en un punto muerto y mas adelante quiero crear una lista de telefonos+nombre en otra parte de la aplicacion. Gracias

Dante Valencia

unread,
Oct 10, 2014, 9:04:46 AM10/10/14
to desarrollad...@googlegroups.com


te aconsejo revisar los tutoriales desde el 39 hasta el 50, esos tutoriales tienen todo lo que necesitas saber hacerca sqlite... 

Dante Valencia

unread,
Oct 10, 2014, 9:06:28 AM10/10/14
to desarrollad...@googlegroups.com
*ACERCA

El 10 de octubre de 2014, 9:04, Dante Valencia <dante.va...@gmail.com> escribió:


te aconsejo revisar los tutoriales desde el 39 hasta el 50, esos tutoriales tienen todo lo que necesitas saber hacerca sqlite... 

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/desarrolladores-android/G-r1V5FongA/unsubscribe.
Para anular la suscripción a este grupo y a todos sus temas, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/9486dbaa-b33f-4dfa-8963-8ff8ccd5a887%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Un saludo
Dante Armando Valencia Oporto

Fernando Garcia

unread,
Oct 10, 2014, 4:55:14 PM10/10/14
to desarrollad...@googlegroups.com
Muchas gracias, les echare un vistazo a todos los que me recomiendas. Tambien he encontrado un libro que parece bastante clarificador.

En cuanto me aclare os pondre los progresos.

Fernando Garcia

unread,
Oct 21, 2014, 11:59:50 AM10/21/14
to desarrollad...@googlegroups.com
Gracias por los videotutoriales de esa pagina que me recomendasteis. Al fin he conseguido hacerla funcionar y adaptarla en mi codigo. Muy buenos y sencillos esos videos.

Dante Valencia

unread,
Oct 21, 2014, 12:08:26 PM10/21/14
to desarrollad...@googlegroups.com
De nada, que bien que te sirvieron. 

El 21 de octubre de 2014, 11:59, Fernando Garcia <liderdel...@gmail.com> escribió:
Gracias por los videotutoriales de esa pagina que me recomendasteis. Al fin he conseguido hacerla funcionar y adaptarla en mi codigo. Muy buenos y sencillos esos videos.

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/desarrolladores-android/G-r1V5FongA/unsubscribe.
Para anular la suscripción a este grupo y a todos sus temas, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

Fernando Garcia

unread,
Oct 30, 2014, 1:25:16 PM10/30/14
to
Hola de nuevo!:

He retomado el tema de las bases de datos siguiendo los tutos, pero me quedan algunas dudas ahora que estoy ampliando el codigo. El tema esta en que si la base de datos no esta creada te manda una exception y se cierra la aplicacion. para evitar eso en el OnCreate despues de :

db.execSQL("CREATE TABLE " + N_TABLA1 + "(" + ID_FILA + " INTEGER PRIMARY KEY AUTOINCREMENT, " + ID_LINEA1 + " TEXT NOT NULL, " + ID_LINEA2 + " TEXT NOT NULL, " + ID_LINEA3 + " TEXT NOT NULL, " + ID_LINEA4 + " TEXT NOT NULL, " + ID_LINEA5 + " TEXT NOT NULL)");

he añadido los siguiente:

db.execSQL("INSERT INTO " + N_TABLA1 + "(" + ID_LINEA1 + ")" + " VALUES ('Vacio');");

Repitiendo esta linea 5 veces ten total y cambiando el ID_Linea correspondiente. Ademas, he puesto "vacio" para que contenga algo que pueda mostrar mas adelante. Con esto creo que de doy un valor y consigo que no se pare la aplicacion de golpe (No se si hasta ahora lo he hecho bien).

El problema viene cuando intento leer lo que hay en la base de datos. Os pongo parte del codigo para ver si podeis ayudarme:

TextView textoL1, textoL2, textoL3, textoL4, textoL5;
EditText editarL1, editarL2, editarL3, editarL4, editarL5;
Button Btn_introducir, Btn_limpiar, Btn_cancelar;
String Linea1;
String Linea2;
String Linea3;
String Linea4;
String Linea5;
String b;
textoL1 = (TextView) findViewById(R.id.tvVL1);
editarL1 = (EditText) findViewById(R.id.etL1);


BdDatosMedicos dg = new BdDatosMedicos(this);
b="1";
Long lb = Long.parseLong(b);

dg.abrir();

Linea1=dg.getL1(lb);
textoL1.setText(Linea1);

dg.cerrar();

Basicamente abro la base de datos, leo la posicion 1 (fila 1 y columnas del 1 al 5,en este caso siempre voy a trabajar con la fila 1 y modificar sus columnas). Os pongo el codigo del getL1 a ver si lo veis bien:

public String getL1(Long lb) {
        // TODO Auto-generated method stub
        String[]columnas = new String[]{ID_FILA, ID_LINEA1, ID_LINEA2, ID_LINEA3, ID_LINEA4, ID_LINEA5};
        Cursor c = nBD.query(N_TABLA1, columnas, ID_FILA + "=" + lb, null, null, null, null);
        if(c != null){
            c.moveToFirst();
            String nb = c.getString(1);
            return nb;
        }
        return null;
    }

Espero vuestra ayuda, porque no se ahora mismo donde puede estar el fallo. Un saludo.

Juan de Dios Maldonado Sánchez

unread,
Oct 30, 2014, 1:44:36 PM10/30/14
to desarrollad...@googlegroups.com
¿y por qué no usas el SQLiteOpenHelper?


Si no entiendes la documentación oficial, aquí tienes un tutorial:


Basicamente abro la base de datos, leo la posicion 1 (en este caso siempre voy a trabajar con la posicion 1, mofi

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Fernando Garcia

unread,
Oct 30, 2014, 2:35:44 PM10/30/14
to desarrollad...@googlegroups.com
Si utilizo SQLiteOpenHelper, lo que pasa es que segun el tutorial que lei crea una clase tal que asi para manejar la base de datos:

public class BdDatosMedicos{

    public static final String ID_FILA = "_id";
    public static final String ID_LINEA1 = "linea_numero1";
    public static final String ID_LINEA2 = "linea_numero2";
    public static final String ID_LINEA3 = "linea_numero3";
    public static final String ID_LINEA4 = "linea_numero4";
    public static final String ID_LINEA5 = "linea_numero5";

    private static final String N_BD = "KernelDM";
    private static final String N_TABLA1 = "Tabla_Datos_Medicos";
    private static final int VERSION_BD = 1;

    private BDHelper nHelper;
    private final Context nContexto;
    private SQLiteDatabase nBD;

    private static class BDHelper extends SQLiteOpenHelper {

        public BDHelper(Context context) {
            super(context, N_BD, null, VERSION_BD);
            // TODO Auto-generated constructor stub

        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub

            // Crea la tabla de los telefonos

            db.execSQL("CREATE TABLE " + N_TABLA1 + "(" + ID_FILA + " INTEGER PRIMARY KEY AUTOINCREMENT, " + ID_LINEA1 + " TEXT NOT NULL, " + ID_LINEA2 + " TEXT NOT NULL, " + ID_LINEA3 + " TEXT NOT NULL, " + ID_LINEA4 + " TEXT NOT NULL, " + ID_LINEA5 + " TEXT NOT NULL)");
            db.execSQL("INSERT INTO " + N_TABLA1 + "(" + ID_LINEA1 + ")" + " VALUES ('Vacio');");
            db.execSQL("INSERT INTO " + N_TABLA1 + "(" + ID_LINEA2 + ")" + " VALUES ('Vacio');");
            db.execSQL("INSERT INTO " + N_TABLA1 + "(" + ID_LINEA3 + ")" + " VALUES ('Vacio');");
            db.execSQL("INSERT INTO " + N_TABLA1 + "(" + ID_LINEA4 + ")" + " VALUES ('Vacio');");
            db.execSQL("INSERT INTO " + N_TABLA1 + "(" + ID_LINEA5 + ")" + " VALUES ('Vacio');");


        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

            // TODO Auto-generated method stub
            db.execSQL("DROP TABLE IF EXITS " + N_TABLA1);
            onCreate(db);

        }

    }

    public BdDatosMedicos(Context c){
        nContexto=c;
    }

    public BdDatosMedicos abrir() throws Exception{
        nHelper = new BDHelper(nContexto);
        nBD = nHelper.getWritableDatabase();
        return this;
    }

    public void cerrar() {

        // TODO Auto-generated method stub
        nHelper.close();
    }

    public long crearEntrada(String lin1, String lin2, String lin3, String lin4, String lin5) {

        // TODO Auto-generated method stub
        ContentValues cv = new ContentValues();
        cv.put(ID_LINEA1, lin1);
        cv.put(ID_LINEA2, lin2);
        cv.put(ID_LINEA3, lin3);
        cv.put(ID_LINEA4, lin4);
        cv.put(ID_LINEA5, lin5);

        return nBD.insert(N_TABLA1, null, cv);
    }

    public String recibir() {

        // TODO Auto-generated method stub
        String[]columnas = new String[]{ID_FILA, ID_LINEA1, ID_LINEA2, ID_LINEA3, ID_LINEA4, ID_LINEA5};
        Cursor c = nBD.query(N_TABLA1,  columnas, null, null, null, null, null);
        String resultado= "";

        int iFila = c.getColumnIndex(ID_FILA);
        int iL1= c.getColumnIndex(ID_LINEA1);
        int iL2= c.getColumnIndex(ID_LINEA2);
        int iL3= c.getColumnIndex(ID_LINEA3);
        int iL4= c.getColumnIndex(ID_LINEA4);
        int iL5= c.getColumnIndex(ID_LINEA5);

        for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){

            resultado = resultado + c.getString(iFila) + " " + c.getString(iL1) + " " + c.getString(iL2) + " " + c.getString(iL3) + " " + c.getString(iL4) + " " + c.getString(iL5) + "\n";
        }

        return resultado;

    }

    public String getL1(Long lb) {
        // TODO Auto-generated method stub
        String[]columnas = new String[]{ID_FILA, ID_LINEA1, ID_LINEA2, ID_LINEA3, ID_LINEA4, ID_LINEA5};
        Cursor c = nBD.query(N_TABLA1, columnas, ID_FILA + "=" + lb, null, null, null, null);
        if(c != null){
            c.moveToFirst();
            String nb = c.getString(1);
            return nb;
        }
        return null;
    }

    public String getL2(Long lb) {

        // TODO Auto-generated method stub
        String[]columnas = new String[]{ID_FILA, ID_LINEA1, ID_LINEA2, ID_LINEA3, ID_LINEA4, ID_LINEA5};
        Cursor c = nBD.query(N_TABLA1, columnas, ID_FILA + "=" + lb, null, null, null, null);
        if(c != null){
            c.moveToFirst();
            String nb = c.getString(2);
            return nb;
        }
        return null;
    }

    public String getL3(Long lb) {

        // TODO Auto-generated method stub
        String[]columnas = new String[]{ID_FILA, ID_LINEA1, ID_LINEA2, ID_LINEA3, ID_LINEA4, ID_LINEA5};
        Cursor c = nBD.query(N_TABLA1, columnas, ID_FILA + "=" + lb, null, null, null, null);
        if(c != null){
            c.moveToFirst();
            String nb = c.getString(3);
            return nb;
        }
        return null;
    }

    public String getL4(Long lb) {

        // TODO Auto-generated method stub
        String[]columnas = new String[]{ID_FILA, ID_LINEA1, ID_LINEA2, ID_LINEA3, ID_LINEA4, ID_LINEA5};
        Cursor c = nBD.query(N_TABLA1, columnas, ID_FILA + "=" + lb, null, null, null, null);
        if(c != null){
            c.moveToFirst();
            String nb = c.getString(4);
            return nb;
        }
        return null;
    }

    public String getL5(Long lb) {

        // TODO Auto-generated method stub
        String[]columnas = new String[]{ID_FILA, ID_LINEA1, ID_LINEA2, ID_LINEA3, ID_LINEA4, ID_LINEA5};
        Cursor c = nBD.query(N_TABLA1, columnas, ID_FILA + "=" + lb, null, null, null, null);
        if(c != null){
            c.moveToFirst();
            String nb = c.getString(5);
            return nb;
        }
        return null;
    }

    public void editar(long eFila1, String eL1, String eL2, String eL3, String eL4, String eL5) throws SQLException {

        // TODO Auto-generated method stub
        ContentValues cvEditar = new ContentValues();
        cvEditar.put(ID_LINEA1, eL1);
        cvEditar.put(ID_LINEA2, eL2);
        cvEditar.put(ID_LINEA3, eL3);
        cvEditar.put(ID_LINEA4, eL4);
        cvEditar.put(ID_LINEA5, eL5);
        nBD.update(N_TABLA1, cvEditar, ID_FILA + "=" + eFila1, null);
    }


    public void borrar (long elFila1) throws SQLException{

        // TODO Auto-generated method stub
        nBD.delete(N_TABLA1, ID_FILA + "=" + elFila1, null);
    }

}

Fernando Garcia

unread,
Oct 31, 2014, 2:51:08 PM10/31/14
to desarrollad...@googlegroups.com

Bueno,al final parece que lo he solucionado y puedo crear y acceder a la base de datos de mi aplicacion. El problema principal que tenia es que se me paraba la aplicacion cuando intentaba acceder a la base de datos. Despues de darle muchas vueltas he visto que para que no se pare, a parte de crear la tabla en el oncreate, debia introducir un valor para cuando accedía a la posicion 1 no saltase dicho error. Una vez corregido eso, he podido adaptar el codigo para que funcionase lo demas.

Gracias y un saludo.

James Revelo

unread,
Nov 1, 2014, 9:36:16 PM11/1/14
to desarrollad...@googlegroups.com
Cuando trabajes con bases de datos es bueno loguear tu aplicación con el método de clase Log.d() para hacerle seguimiento a tu base de datos. El método te permite escribir en el logcat un mensaje en tiempo real. Así podrás ver que datos salen, entran y que resultados se van obteniendo. Eso te ayudará a optimizar el tiempo de corrección de errores. Saludos!
Reply all
Reply to author
Forward
0 new messages