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 |
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.
Y para terminar en nuestra MainActivity.
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.
No hay comentarios:
Publicar un comentario