Blog para desarrollo de aplicaciones en Android, aprende paso a paso como crear aplicaciones.

Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación para mostrarle publicidad personalizada y realizar análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. OK Más información | Y más

Como crear un Spinner utilizando SQLite Database en Android

Como crear un Spinner utilizando SQLite en Android

Hola amigos vamos a crear un pequeño tutorial de como crear un Spinner utilizando SQLite en Android Studio vamos a iniciar con este pequeño ejemplo


¿Que es SQLite Database?

SQLite es una base de datos SQL de código abierto que almacena datos en un archivo de texto en un dispositivo. Android viene con implementación de base de datos SQLite incorporada.

SQLite admite todas las características de la base de datos relacional. Para acceder a esta base de datos, no es necesario establecer ningún tipo de conexión, como JDBC, ODBC, etc.

Como crear un Proyecto en Android Studio

Vamos a crear un proyecto en Android estudio para poder continuar con este ejemplo vamos a seguir el siguiente link. (Aquí).
Como crear un Spinner utilizando SQLite Database en Android Studio
Como crear un Spinner utilizando SQLite Database en Android Studio

Diseño de Spinner utilizando SQLite Database

El diseño de nuestra aplicación quedara de la siguiente forma utilizando los controles que describiré acontinuación.

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity">
    <RelativeLayout
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin">

        <Spinner
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/spinStudent_Simple"
            android:layout_below="@+id/tvSpinner"
            android:layout_alignParentStart="true" />

        <Spinner
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/spinStudent"
            android:layout_below="@+id/tvStudent"
            android:layout_alignParentStart="true" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Spinner Simple"
            android:id="@+id/tvSpinner"
            android:layout_alignParentTop="true"
            android:layout_alignParentStart="true" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Spinner"
            android:id="@+id/tvStudent"
            android:layout_below="@+id/spinStudent_Simple"
            android:layout_alignParentStart="true" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Name"
            android:id="@+id/tvName"
            android:layout_below="@+id/spinStudent"
            android:layout_alignParentStart="true"
            android:layout_marginTop="32dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Age"
            android:id="@+id/tvAge"
            android:layout_marginTop="38dp"
            android:layout_below="@+id/tvName"
            android:layout_alignParentStart="true" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Email"
            android:id="@+id/tvEmail"
            android:layout_marginTop="38dp"
            android:layout_below="@+id/tvAge"
            android:layout_alignParentStart="true" />

    </RelativeLayout>
</android.support.design.widget.CoordinatorLayout>

El diseño visual de nuestra aplicación seria el siguiente


Es muy sencillo de crear nuestro diseño.

Código de nuestra aplicación Spinner utilizando SQlite Database en Android

Vamos a continuar con el código de nuestra aplicación de forma muy sencilla para que puedan desarrollarlo en su aplicación.

Comenzaremos creando una clase a la que llamaremos Estudiantes

El código para nuestra clase sera el siguiente.


public class Estudiantes {
    // Labels table name
    public static final String TABLE = "Student";

    // Labels Table Columns names
    public static final String KEY_ID = "id";
    public static final String KEY_name = "name";
    public static final String KEY_email = "email";
    public static final String KEY_age = "age";

    private int student_ID;
    private String name;
    private String email;
    private int age;

    public void setAge(Integer age){
        this.age=age;
    }

    public Integer getAge(){
        return this.age;
    }

    public void setName(String name){
        this.name=name;
    }

    public String getName(){
        return this.name;
    }

    public void setEmail(String email){
        this.email=email;
    }

    public String getEmail(){
        return this.email;
    }

    public void setStudent_ID(Integer student_ID){
        this.student_ID=student_ID;
    }

    public Integer getStudent_ID(){
        return this.student_ID;
    }
}


Luego crearemos una clase a la que llamaremos SQLiteDB


Y escribiremos las siguientes sentencias de código.

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

public class SQLiteDB extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    // Nombre de la base de datos
    private static final String DATABASE_NAME = "spinner.db";
    public SQLiteDB(Context context ) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        String CREATE_TABLE_STUDENT = "CREATE TABLE " + Estudiantes.TABLE  + "("
                + Estudiantes.KEY_ID  + " INTEGER PRIMARY KEY AUTOINCREMENT ,"
                + Estudiantes.KEY_name + " TEXT, "
                + Estudiantes.KEY_age + " INTEGER, "
                + Estudiantes.KEY_email + " TEXT )";

        db.execSQL(CREATE_TABLE_STUDENT);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed, all data will be gone
        db.execSQL("DROP TABLE IF EXISTS " + Estudiantes.TABLE);

        // Create tables again
        onCreate(db);

    }
}


Ahora añadiremos la clase que se encargara de insertar la información en nuestra base de datos SQlite. se llamara EstudianteReport


import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class EstudianteReport {
    private SQLiteDB dbHelper;

    public EstudianteReport(Context context) {
        dbHelper = new SQLiteDB(context);
    }

    //Delete all data in the table
    public void Delete() {
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        db.delete(Estudiantes.TABLE, null, null);
        db.close(); // Closing database connection
    }

    //Insert student records
    public int insert(Estudiantes student) {
        // TODO Auto-generated method stub
        //Integer noStudent = getStudentCount();

        SQLiteDatabase db = dbHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(Estudiantes.KEY_age, student.getAge());
        values.put(Estudiantes.KEY_email, student.getEmail());
        values.put(Estudiantes.KEY_name, student.getName());

        // Inserting Row
        long student_Id = db.insert(Estudiantes.TABLE, null, values);
        db.close(); // Closing database connection
        return (int) student_Id;
    }
    //Retrieve all records and populate into List<Student>
    //This method allow you to retrieve more fields/information into List.
    public List<Estudiantes> getAll() {
        SQLiteDatabase db = dbHelper.getReadableDatabase();
        String selectQuery = "SELECT  " +
                Estudiantes.KEY_ID + "," +
                Estudiantes.KEY_name + "," +
                Estudiantes.KEY_email + "," +
                Estudiantes.KEY_age +
                " FROM " + Estudiantes.TABLE;

        List<Estudiantes> studentList = new ArrayList<Estudiantes>() ;
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                Estudiantes student  = new Estudiantes();
                student.setAge(cursor.getInt(cursor.getColumnIndex(Estudiantes.KEY_age)));
                student.setEmail(cursor.getString(cursor.getColumnIndex(Estudiantes.KEY_email)));
                student.setName(cursor.getString(cursor.getColumnIndex(Estudiantes.KEY_name)));
                student.setStudent_ID(cursor.getInt(cursor.getColumnIndex(Estudiantes.KEY_ID)));
                studentList.add(student);

            } while (cursor.moveToNext());
        }

        cursor.close();
        db.close();
        return studentList;

    }

    //Retrieve all records and populate into List<String>
    public List<String> getAll_Simple() {
        SQLiteDatabase db = dbHelper.getReadableDatabase();
        String selectQuery = "SELECT  " +
                Estudiantes.KEY_age + "," +
                Estudiantes.KEY_name +
                " FROM " + Estudiantes.TABLE;

        List<String> studentList = new ArrayList<String>() ;
        Cursor cursor = db.rawQuery(selectQuery, null);
        Integer i=0;
        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                studentList.add(i,cursor.getString(cursor.getColumnIndex(Estudiantes.KEY_name)));
                i+=1;
            } while (cursor.moveToNext());
        }

        cursor.close();
        db.close();
        return studentList;

    }
}

Y para continuar vamos programar nuestra clase Adaptador de nuestro Spinner.


import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import java.util.List;

public class EstudianteSpinnerAdapter extends ArrayAdapter<Estudiantes> {

    private Context mContext;
    private List<Estudiantes> mValues;

    public EstudianteSpinnerAdapter(Context context,
        int textViewResourceId, List<Estudiantes> objects) {
        super(context, textViewResourceId, objects);
        this.mContext = context;
        this.mValues = objects;
    }

    @Override
    public int getCount(){
        return mValues.size();
    }

    @Override
    public Estudiantes getItem(int position){
        return mValues.get(position);
    }

    @Override
    public long getItemId(int position){
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //This is for the first item before dropdown or default state.
        TextView label = new TextView(mContext);
        label.setTextColor(Color.BLACK);
        label.setTextSize(18);
        label.setText(" " + mValues.get(position).getName());
        label.setHeight(50);
        label.setGravity(Gravity.LEFT | Gravity.CENTER );
        return label;
    }

    @Override
    public View getDropDownView(int position, View convertView,
        ViewGroup parent) {
        //This is when user click the spinner and list of item display
        // beneath it  
        TextView label = new TextView(mContext);
        label.setTextColor(Color.BLACK);
        label.setTextSize(18);
        label.setText(" " + mValues.get(position).getName());
        label.setHeight(70);
        label.setGravity(Gravity.LEFT | Gravity.CENTER );

        return label;
    }
}

Y para terminar en nuestra MainActivity.


import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.List;

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener  {

    Spinner mSpinStudent, mSpinStudent_Simple;
    TextView mTvName, mTvAge, mTvEmail;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mSpinStudent = (Spinner) findViewById(R.id.spinStudent);
        mSpinStudent_Simple= (Spinner) findViewById(R.id.spinStudent_Simple);

        mTvAge= (TextView) findViewById(R.id.tvAge);
        mTvEmail= (TextView) findViewById(R.id.tvEmail);
        mTvName= (TextView) findViewById(R.id.tvName);

        mSpinStudent.setOnItemSelectedListener(this);
        mSpinStudent_Simple.setOnItemSelectedListener(this);

        insertDummyData();
        loadStudent();
        loadStudent_Simple();
    }

    @Override
    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
        if (parentView== findViewById(R.id.spinStudent)){
            Estudiantes selected = (Estudiantes) parentView.getItemAtPosition(position);
            mTvName.setText("Name: " + selected.getName());
            mTvAge.setText( "Age: " + selected.getAge().toString());
            mTvEmail.setText("Email: " + selected.getEmail());
        }
        else if (parentView== findViewById(R.id.spinStudent_Simple)){
            //This is the limitation of this method
            // as no other information could use to display
            //student record except the text.
            mTvName.setText(((TextView) selectedItemView).getText());
            mTvAge.setText("I DON'T KNOW, THIS IS NOT POSSIBLE!!!");
            mTvEmail.setText("I DON'T KNOW YOU NEED TO QUERY DB!!!");
        }
    }

    @Override
    public void onNothingSelected(AdapterView<?> parentView) {
        mTvAge.setText( "");
        mTvEmail.setText( "");
        mTvName.setText("");
    }

    //Insert some dummy data for displaying on spinner
    private void insertDummyData(){

        EstudianteReport repo = new EstudianteReport(this);
        repo.Delete();

        for (Integer i=0;i<5;i++){
            Estudiantes student = new Estudiantes();
            student.setAge(10);
            student.setEmail("tutor@instinctcoder.com");
            student.setName("Tan Woon How " + i.toString());
            repo.insert(student);

        }
    }

    //This is the arrayadapter  binding method as you can see
    private void loadStudent_Simple(){
        ArrayAdapter<String> spinnerAdapter;
        EstudianteReport db = new EstudianteReport(getApplicationContext());
        List<String> students = db.getAll_Simple();
        spinnerAdapter = new ArrayAdapter<String>(MainActivity.this,
                android.R.layout.simple_spinner_item, students);
        mSpinStudent_Simple.setAdapter(spinnerAdapter);

        spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    }

    //This is the customize adapter binding method as you can see
    //there is only a slight different if you compare with functino loadStudent_Simple.
    private void loadStudent(){
        EstudianteSpinnerAdapter studentAdapter;
        EstudianteReport db = new EstudianteReport(getApplicationContext());
        List<Estudiantes> students = db.getAll();
        studentAdapter = new EstudianteSpinnerAdapter(MainActivity.this,
                android.R.layout.simple_spinner_item , students );
        mSpinStudent.setAdapter(studentAdapter);

        studentAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    }

}

Y listo ahora vamos a crear un emulador y ejecutar nuestro ejemplo.

Como crear un emulador AVD en Android(Aquí)

 Y listo espero haya sido de su agrado. Recuerda suscribirte a nuestro canal de Youtube y seguirnos en Facebook. Gracias!

Descargar

Android Studio - Curso Español

Android Studio - Curso Español

No hay comentarios:

Publicar un comentario

x

Registrate!

Curso Android Español

Curso Kotlin Español

eBook Free Android Studio

Noticias y Eventos

¡Directamente a tu INBOX!

Le enviaremos nuestros recursos gratis. Para obtener nuestro contenido nuevo, únase a nuestra comunidad. No te molestaremos enviando información inútil. ¡No te pierdas ninguna actualización, mantente conectado! Recuerda verificar tu correo electronico.

Ingrese su dirección de correo electrónico:

Entregado por FeedBurner