ListView SQLite Agregar/Actualizar/Eliminar





Importante: el id siempre se tiene que llamar "_id"

MyActivity.java
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;

public class MyActivity extends ActionBarActivity {

    Button btnAgregarMiembro;
    ListView lista;
    SQLControlador dbconeccion;
    TextView tv_miemID, tv_miemNombre;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        dbconeccion = new SQLControlador(this);
        dbconeccion.abrirBaseDeDatos();
        btnAgregarMiembro = (Button) findViewById(R.id.btnAgregarMiembro);
        lista = (ListView) findViewById(R.id.listViewMiembros);

        //acción del boton agregar miembro
        btnAgregarMiembro.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent iagregar = new Intent(MyActivity.this, AgregarMiembro.class);
                startActivity(iagregar);
            }
        });

        // Tomar los datos desde la base de datos para poner en el curso y después en el adapter
        Cursor cursor = dbconeccion.leerDatos();

        String[] from = new String[] {
                DBhelper.MIEMBRO_ID,
                DBhelper.MIEMBRO_NOMBRE
        };
        int[] to = new int[] {
                R.id.miembro_id,
                R.id.miembro_nombre
        };

        SimpleCursorAdapter adapter = new SimpleCursorAdapter(
                MyActivity.this, R.layout.formato_fila, cursor, from, to);

        adapter.notifyDataSetChanged();
        lista.setAdapter(adapter);

        // acción cuando hacemos click en item para poder modificarlo o eliminarlo
        lista.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int position, long id) {

                tv_miemID = (TextView) view.findViewById(R.id.miembro_id);
                tv_miemNombre = (TextView) view.findViewById(R.id.miembro_nombre);

                String aux_miembroId = tv_miemID.getText().toString();
                String aux_miembroNombre = tv_miemNombre.getText().toString();

                Intent modify_intent = new Intent(getApplicationContext(), ModificarMiembro.class);
                modify_intent.putExtra("miembroId", aux_miembroId);
                modify_intent.putExtra("miembroNombre", aux_miembroNombre);
                startActivity(modify_intent);
            }
        });
    }  //termina el onCreate
} //termina clase

AgregarMiembro.java
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class AgregarMiembro extends Activity implements OnClickListener {
 EditText et;
 Button btnAgregar, read_bt;
 SQLControlador dbconeccion;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.agregar_miembro);
  et = (EditText) findViewById(R.id.et_miembro_id);
  btnAgregar = (Button) findViewById(R.id.btnAgregarId);

  dbconeccion = new SQLControlador(this);
  dbconeccion.abrirBaseDeDatos();
  btnAgregar.setOnClickListener(this);
 }

 @Override
 public void onClick(View v) {
  // TODO Auto-generated method stub
  switch (v.getId()) {
  case R.id.btnAgregarId:
   String name = et.getText().toString();
   dbconeccion.insertarDatos(name);
   Intent main = new Intent(AgregarMiembro.this, MyActivity.class)
     .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
   startActivity(main);
   break;

  default:
   break;
  }
 }
}

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

public class DBhelper extends SQLiteOpenHelper {

 // Información de la tabla
  public static final String TABLE_MEMBER = "miembros";
  public static final String MIEMBRO_ID = "_id";
  public static final String MIEMBRO_NOMBRE = "nombre";

  // información del a base de datos
  static final String DB_NAME = "DBMIEMBRO";
  static final int DB_VERSION = 1;
  
 // Información de la base de datos
 private static final String CREATE_TABLE = "create table "
   + TABLE_MEMBER + "(" + MIEMBRO_ID
   + " INTEGER PRIMARY KEY AUTOINCREMENT, "
   + MIEMBRO_NOMBRE + " TEXT NOT NULL);";

 public DBhelper(Context context) {
        super(context, DB_NAME, null,DB_VERSION);
 }

 @Override
 public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE);
 }

 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  // TODO Auto-generated method stub
  db.execSQL("DROP TABLE IF EXISTS " + TABLE_MEMBER);
  onCreate(db);
 }
}

ModificarMiembro.java
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class ModificarMiembro extends Activity implements OnClickListener {

 EditText et;
 Button btnActualizar, btnEliminar;

 long member_id;

 SQLControlador dbcon;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.modificar_miembro);

  dbcon = new SQLControlador(this);
  dbcon.abrirBaseDeDatos();

  et = (EditText) findViewById(R.id.et_miembro_id);
  btnActualizar = (Button) findViewById(R.id.btnActualizar);
  btnEliminar = (Button) findViewById(R.id.btnEliminar);

  Intent i = getIntent();
  String memberID = i.getStringExtra("miembroId");
  String memberName = i.getStringExtra("miembroNombre");

  member_id = Long.parseLong(memberID);

  et.setText(memberName);

  btnActualizar.setOnClickListener(this);
  btnEliminar.setOnClickListener(this);

 }

 @Override
 public void onClick(View v) {
  // TODO Auto-generated method stub
  switch (v.getId()) {
  case R.id.btnActualizar:
   String memName_upd = et.getText().toString();
   dbcon.actualizarDatos(member_id, memName_upd);
   this.returnHome();
   break;

  case R.id.btnEliminar:
   dbcon.deleteData(member_id);
   this.returnHome();
   break;
  }
 }

 public void returnHome() {

  Intent home_intent = new Intent(getApplicationContext(),
    MyActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

  startActivity(home_intent);
 }
}

SQLControlador
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

public class SQLControlador {

 private DBhelper dbhelper;
 private Context ourcontext;
 private SQLiteDatabase database;

 public SQLControlador(Context c) {
        ourcontext = c;
 }

 public SQLControlador abrirBaseDeDatos() throws SQLException {
  dbhelper = new DBhelper(ourcontext);
  database = dbhelper.getWritableDatabase();
  return this;
 }

 public void cerrar() {
        dbhelper.close();
 }

 public void insertarDatos(String name) {
  ContentValues cv = new ContentValues();
  cv.put(DBhelper.MIEMBRO_NOMBRE, name);
  database.insert(DBhelper.TABLE_MEMBER, null, cv);
 }

 public Cursor leerDatos() {
  String[] todasLasColumnas = new String[] {
                DBhelper.MIEMBRO_ID,
    DBhelper.MIEMBRO_NOMBRE
        };
  Cursor c = database.query(DBhelper.TABLE_MEMBER, todasLasColumnas, null,
    null, null, null, null);
  if (c != null) {
   c.moveToFirst();
  }
  return c;
 }

 public int actualizarDatos(long memberID, String memberName) {
  ContentValues cvActualizar = new ContentValues();
  cvActualizar.put(DBhelper.MIEMBRO_NOMBRE, memberName);
  int i = database.update(DBhelper.TABLE_MEMBER, cvActualizar,
    DBhelper.MIEMBRO_ID + " = " + memberID, null);
  return i;
 }

 public void deleteData(long memberID) {
  database.delete(DBhelper.TABLE_MEMBER, DBhelper.MIEMBRO_ID + "="
    + memberID, null);
 }
}

activity_my.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp">

    <Button
        android:id="@+id/btnAgregarMiembro"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Agregar miembro" />

    <ListView
        android:id="@+id/listViewMiembros"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:dividerHeight="2dp" >
    </ListView>

</LinearLayout>    

agregar_miembro.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="20dp" >

    <EditText
        android:id="@+id/et_miembro_id"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" 
        android:layout_marginTop="40dp"
        android:hint="Agregue aquí el nuevo miembro ...">

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/btnAgregarId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Agregar" />

</LinearLayout>

formato_fila.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/miembro_id"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:visibility="gone" />

    <TextView
        android:id="@+id/miembro_nombre"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="15dp"
        android:textSize="17sp" 
        android:textStyle="bold"/>

</LinearLayout>

modificar_miembro.xml
 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:padding="20dp">

    <EditText
        android:id="@+id/et_miembro_id"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:ems="10" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" 
        android:gravity="center_horizontal">

        <Button
            android:id="@+id/btnActualizar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Actualizar" />

        <Button
            android:id="@+id/btnEliminar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Eliminar" />
    </LinearLayout>

</LinearLayout>

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tatoado.listviewsqlite" >

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MyActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".AgregarMiembro"></activity>
        <activity android:name=".ModificarMiembro"></activity>

    </application>

</manifest>


77 comentarios:

  1. Buenas, me sirvio el tutorial pero cuando quise agregar mas campos en el agregar y modificar, al entrar a la aplicacion instalada, me tira error y se cierra la app. Nunca me muestra ningún tipo de pantalla. Los agregué a la base y todo pero no piedo encontrar el error. Al ejemplo este le podes agregar un campo mas así veo como se hace? Muchas gracias

    ResponderEliminar
    Respuestas
    1. Si podes agregar y modificar campos, pero cada vez que haces eso tenes que desintalarlo manualmente.

      Eliminar
    2. Yo tambien tengo ese problema no encuentro como solucionarlo, lo vuelve instalar y me sigue marcando un error cuando quiere poner mas campos de la BD

      Eliminar
    3. En el emulador, arrastra la app y ponele destinall, nose si lo estarás haciendo así
      sino cambiale el nombre de la tabla

      Eliminar
    4. el de MyActivity.java por que me sale error (ActionBarActivity {
      )

      i
      import android.content.Intent;
      import android.database.Cursor;
      import android.os.Bundle;
      import android.support.v7.app.ActionBarActivity;
      import android.view.View;
      import android.view.View.OnClickListener;
      import android.widget.AdapterView;
      import android.widget.AdapterView.OnItemClickListener;
      import android.widget.Button;
      import android.widget.ListView;
      import android.widget.SimpleCursorAdapter;
      import android.widget.TextView;

      public class MyActivity extends ActionBarActivity {

      Eliminar
  2. me lanza un error "la columna _id no existe"

    ResponderEliminar
    Respuestas
    1. desintalalo y ponele "play" para que se vuelva instalar, en el caso que no te tome los campos

      Eliminar
    2. te tira el error de que no existe la columna _id porque por defecto te crea una columna llamada rowid y tienes que llamarla tambien por ejemplo si quieres el nombre debes poner
      "select rowid _id, nombre from NombreTabla" para que te deje de lanzar ese error espero te sirva mi respuesta

      Eliminar
  3. Buenas amigo, una favor me podrás enviar tu proyecto ya que cuando lo ejecuto presiono el botón de Agregar Miembro Y Se me cierra la aplicación. Por favor lo necesito para mi trabajo.

    ResponderEliminar
    Respuestas
    1. El proyecto es el q esta subido en el github.
      Create un proyecto nuevo y copia y pega el código de última.

      Eliminar
  4. Hola Ramiro, una consulta, cómo puedo recuperar el id del item que seleccione del listview y recuperarlo en otra activity para ahi consultar la base de datos mediante un cursor sqlite rawquery?
    sé que es mediante el intent y el id, pero no logro conseguirlo. podrias detallarlo. gracias

    ResponderEliminar
    Respuestas
    1. Si podes recupararlo en cualquier lado, pero tendrías que abrir la bd, hacer repetir mucho código, si el id ya lo tenes en tu layout actual, por ahí te conviene pasarlo por parametros.
      De esta manera.
      http://cursoandroidstudio.blogspot.com.ar/2014/06/pasar-datos-por-parametros-intent.html

      Eliminar
    2. Gracias. ya lo pude resolver! Otra consulta. haz hecho un filtro en un EditText a partir de un ListView por SimpleCursoAdapter?, he estado haciendo uno, pero no lo consigo.

      Eliminar
    3. Podrias hacer un tutorial de ello. te lo agradecería mucho.

      Eliminar
    4. Falta explicar como se filtra, pero esto te puede servir http://cursoandroidstudio.blogspot.com.ar/2014/08/crear-vista-busqueda.html
      es lo que usa whatsapp, facebook, etc para buscar cosas

      Eliminar
    5. Gracias, si lo vi, es una solución muy interesante y practica, pero de todas maneras estoy interesado en el otro filtro. Ojala pudieras explicarlo mas adelante. Gracias

      Eliminar
    6. Tal vez lo que estas buscando es hacer consultas algo como
      SELECT id, nombre, telefono, direccion, nombre
      FROM empresa
      WHERE nombre LIKE xnombre

      Eliminar
  5. Hola. Felicidades por tu blog esta muy bueno y completo.
    Me gustaría saber como puedo importar una base de datos de excel o de algún otro programa de base de datos. Adicionalmente quería saber si se puede agregar imágenes en la base de datos o se puede hacer para llamar a unas imágenes en especifico.
    Muchas gracias.

    ResponderEliminar
    Respuestas
    1. Si.
      1.- Almacenar la ruta de la imagen en un String
      2.- O almacenar la imagen en forma de BLOB

      Eliminar
    2. hola, mira pero como puedo hacer para que me muestre la imagen en un listview, ya logre guardar la url de la imagen en un String, pero como hago para mostrarla?
      Pudieras ayudarme por favor, es urgente.

      Eliminar
  6. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  7. hola saludos
    realice este proyecto así como lo mencionas pero me sale error en las R. de todas las clases, y me podrías decir como solucionarlo

    gracias

    ResponderEliminar
    Respuestas
    1. asi http://cursoandroidstudio.blogspot.com.ar/2015/06/androidr-error.html

      Eliminar
  8. Hola amigos me podrían ayudar un poco: (verán vengo de visual estudio donde con un recordset se ponía esto "rs.MoveNext" y se movían los registros al siguiente) pero para android es diferente y no encuentro el método de programar los botones( primero,anterior,siguiente,ultimo) porfa una manito Saludos desde Colombia

    ResponderEliminar
    Respuestas
    1. aca esta el tutorial http://cursoandroidstudio.blogspot.com.ar/2014/07/base-de-datos-sqlite-parte2.html

      Eliminar
  9. Muy bueno los tutoriales completos y bien explicados pedido podrias realizar un tuto para instalar la app con datos precargado o una base precargada gracias

    ResponderEliminar
    Respuestas
    1. despues del create table tenes que hacer un insert insert insert

      Eliminar
  10. como pasar todo eso para hacerlo remotamente alguien me puede ayudar ? Saludos

    ResponderEliminar
    Respuestas
    1. así http://cursoandroidstudio.blogspot.com.ar/2015/01/base-de-datos-remotas-login.html

      Eliminar
  11. Ramiro muchas gracias por sus aportes en el tema de Android. Pregunta no entiendo para que es el archivo XML Formato_fila.xml.
    Gracias en espera de sus respuesta.

    ResponderEliminar
    Respuestas
    1. Es para hacer un listview con filas personalizadas.
      Cual tienes dos elementos el id (oculto) y el nombre (visible) vos cuando estas haciendo las pruebas podes poner el id (visible) para que veas los id no se repitan.
      Sino podes hacer algo mejor con imagenes http://cursoandroidstudio.blogspot.com.ar/2015/07/listview-con-filas-personalizadas.html

      Eliminar
  12. oye bro como puedo hacer para agregar otro campo ademas del el de miembro dentro de los metodos insert y update?

    ResponderEliminar
    Respuestas
    1. Solo tenes que agregar mas parametros para enviar como para recibir
      dbconeccion.insertarDatos(name, otroCampo);
      public void insertarDatos(String name, String otroCampo) { .. }

      Eliminar
    2. lo ise pero cuando lo hago me manda un mensaje que necesito crear un nuevo metodo insert para el nuevo campo

      Eliminar
    3. agregue otro editText para el apellido pero no quiere el segundo editText

      Eliminar
  13. hola, me ha servido mucho este tutorial, lo he intentado en un proyecto y me sale, pero cuando trato de incluirlo en un proyecto q estoy elaborando no puedo, me sale un error, y creo q es por la parte donde lee dbconeccion.abrirBaseDeDatos(); no encuentro el error, segun yo todo esta similar a tu proyecto, pero no se ejecuta, estoy q reviso cada rato el codigo y nada, podrias ayudarme porfavor.

    ResponderEliminar
  14. hola de nuevo solo queria explicar en detalle como me di cuenta de ello, en tu codigo habia borrado hasta la parte lista=(ListView) findViewById(R.id.------); y pues corria normal salia la ventana, pero en mi caso no salia nada hasta q borre dbconeccion.abrirBaseDeDatos(); y de ahi recien me sali mi ventana. Gracias por tu atencion, espero q me ayudes de verdad necesito mucha ayuda.
    (posdata: te podria sugerir q hagas un video de matrices y gridviews XD )

    ResponderEliminar
  15. Hola! Excelente tutorial :) pero tengo un problema, cuando doy clic en cualquier miembro se detiene la aplicación y no me aparece la ventana de modificar y eliminar :S como puedo resolverlo?? Agregue las lineas del manifiesto pero aun asi no me funciona. Gracias

    ResponderEliminar
  16. Gracias por tù tiempo, corriò bien el còdigo ahora analizar es el siguiente paso, saludos

    ResponderEliminar
  17. Hola, espero que puedas leer este mensaje, pero he visto tu tutorial y todo se entiende a la perfección. Pero tengo dudas...
    Quisiera saber, sí es posible agregar la base de datos creada en algún administrador de base de datos para sqlite. Por ejemplo, me explico... He creado una base de datos en sqlite expert que se llama Escuela y tengo una tabla que se llama alumnos con campos: nombre, apellido, edad.
    Lo que quiero es que pueda cargar esa base de datos en android estudio. No quiero crear la base de datos mediante código en Android studio justo como haces en este tutorial.
    Y luego de cargar la base de datos, pueda insertar, eliminar y actualizar. Espero que puedas responderme con la brevedad posible y entiendas mi problematica. Gracias y un saludo!, me agrada tu blog, es muy recomendable.

    ResponderEliminar
  18. Debería tener la posibilidad de exportar a una bd mysql, cuando lo tengas, ahí podes ver como esta conformada la creación de esa table y de ahí la copias y la pegas.
    Recorda de desintala la app del celular antes de ejecutarla, sino te va a tirar error de campos.

    ResponderEliminar
  19. Hola, podrías hacer un tutorial en donde se pueda ingresar, actualizar y eliminar datos en una base de datos Sqlite ya creada con sqlitebrowser. Me explico, no quiero crear la base de datos mediante código en android. Quiero usar una ya existente. He leído que hay que copiarla a la carpeta assets pero de ahí no veo como poder usarla. Espero que puedas ayudarme

    ResponderEliminar
  20. En algún momento se cierra la base de Datos?

    Podrías decirme en donde por favor. Gracias

    ResponderEliminar
  21. Holaa. quiero felicitarte ya que entendí todo lo que he visto en el semestre en un solo video. busque y busque una aplicación con un tutorial asi para un trabajo y fue el unico que me resolvió dudas y demas. todo muy detallado y bien explicado.. muchas gracias.

    ResponderEliminar
  22. disculpa , tendras alguna aplicacion de paso a paso como programar un boton de encender y apagar un led en android studio conectando a arduino Leonardo?? ya sea por bluetooth o usb??

    ResponderEliminar
  23. muchas gracias por tu aporte, sin embargo permíteme hacerte una consulta, cuando se muestra la información el número 1 2 3 que es el autoincrement no se muestra, porquè si todo lo hice igual?

    ResponderEliminar
    Respuestas
    1. fijate si esta visible, o si esta a lo mejor fuera del cuadro

      Eliminar
  24. Hola Ramiro, muchas gracias por el contenido, tengo una pregunta, como se podría cargar desde una BD un spinner? estoy intentando coger este mismo codigo pero con un spinner y no me funciona. Gracias

    ResponderEliminar
  25. hermano no entiendo la parte en como cargas losd atos desde la bd y lo muestras en el listview... osea no entiendo la aprte en la que amrmas el string para cargar los elementos y luegos reflejarlos en el lv... de vdd que no comprendo el codigo podrias ayudarme con eso... muchas gracias

    ResponderEliminar
  26. hola viejo una pregunta estoy programando en eclipse y casi ya acabo mi proyecto
    la cuestion es q cuando quiero jalar los datos q registre no me reconoce el ActionBarActivity y ya agrege la librecia v7
    y aun asi me salta error que puedo hacer

    ResponderEliminar
  27. Hola resulta que soy un tanto nuevo en esto y estoy tratando de crear una base datos que toma valores desde un edit text y los guarde, solo eso para despues poder usar esos valores desde otro boton.....revise este tutorial y otros pero sigo confundido ya que al momento de tratar de insertar los datos las clases no me los reconocen.
    quizá la respuesta está aquí, pero como soy nuevo no soy capaz de verla, no se si me podrias ayudar con eso por favor.

    ResponderEliminar
  28. oye y si quiero agregar una imagen desde la galeria tambien se puede ? me gustaria que me respondieras

    ResponderEliminar
  29. muy bueno el tutorial...solo que tengo una duda si quiero introducir dos campos por ejemplo en esta parte del archivo AgregarMienbro.java

    dbconeccion.insertarDatos(name);

    como podría quedar, lo intente así...

    dbconeccion.insertarDatos(name);
    dbconeccion.insertarDatos(name);

    o seria si...

    dbconeccion.insertarDatos(name, last_name);

    o alguien si podrían ayudarme porras. Gracias

    ResponderEliminar
    Respuestas
    1. public void insertarDatos(String name) {
      ContentValues cv = new ContentValues();
      cv.put(DBhelper.MIEMBRO_NOMBRE, name);
      cv.put(DBhelper.MIEMBRO_APELLIDO, last_name);
      database.insert(DBhelper.TABLE_MEMBER, null, cv);
      }

      Y no te olvides de modificar la base de datos:

      public class DBhelper extends SQLiteOpenHelper {

      // Información de la tabla
      public static final String TABLE_MEMBER = "miembros";
      public static final String MIEMBRO_ID = "_id";
      public static final String MIEMBRO_NOMBRE = "nombre";
      public static final String MIEMBRO_APELLIDO = "apellido";

      // información del a base de datos
      static final String DB_NAME = "DBMIEMBRO";
      static final int DB_VERSION = 1;

      // Información de la base de datos
      private static final String CREATE_TABLE = "create table "
      + TABLE_MEMBER + "(" + MIEMBRO_ID
      + " INTEGER PRIMARY KEY AUTOINCREMENT, "
      + MIEMBRO_NOMBRE + " TEXT NOT NULL, "
      + MIEMBRO_APELLIDO + " TEXT NOT NULL);";

      Eliminar
  30. public void insertarDatos(String name) {
    ContentValues cv = new ContentValues();
    cv.put(DBhelper.MIEMBRO_NOMBRE, name);
    cv.put(DBhelper.MIEMBRO_APELLIDO, last_name);
    database.insert(DBhelper.TABLE_MEMBER, null, cv);
    }

    Y no te olvides de modificar la base de datos:

    public class DBhelper extends SQLiteOpenHelper {

    // Información de la tabla
    public static final String TABLE_MEMBER = "miembros";
    public static final String MIEMBRO_ID = "_id";
    public static final String MIEMBRO_NOMBRE = "nombre";
    public static final String MIEMBRO_APELLIDO = "apellido";

    // información del a base de datos
    static final String DB_NAME = "DBMIEMBRO";
    static final int DB_VERSION = 1;

    // Información de la base de datos
    private static final String CREATE_TABLE = "create table "
    + TABLE_MEMBER + "(" + MIEMBRO_ID
    + " INTEGER PRIMARY KEY AUTOINCREMENT, "
    + MIEMBRO_NOMBRE + " TEXT NOT NULL, "
    + MIEMBRO_APELLIDO + " TEXT NOT NULL);";

    ResponderEliminar
    Respuestas
    1. Necesito agregar mas campos para la base datos, pero AL AGREGAR EN EL MyActivity.JAVA:

      String[] from = new String[] {
      DBhelper.MIEMBRO_ID,
      DBhelper.MIEMBRO_NOMBRE,
      DBhelper.MIEMBRO_DIRECCION,


      me aparece error al ejecutar la aplicacion en el simulador y se cierra la aplicacion... que puede ser... o e que acaso hay no van escritos esos campos.

      Eliminar
  31. Hola Ramiro, me encanta todos tus cursos de Android te he estado siguiendo. Estoy realizando este Curso de ListView SQLite Agregar/Actualizar/Eliminar pero al abrir tu proyecto o hacer el mio me sale un Error:(19, 0) Gradle DSL method not found: 'android()'
    Possible causes: The project 'ListViewSqliteEjemplo-master' may be using a version of Gradle that does not contain the method.
    a href="openGradleSettings" Gradle settings The build file may be missing a Gradle plugin.
    a href="apply.gradle.plugin" Apply Gradle plugin
    Me ayudas por favor.

    ResponderEliminar
  32. Cordial saludo desde Colombia, si yo quisiera que la información recien guardada en sqlite se almacenara en una base de datos externa y asi mismo mi dispositivo se sincronizara.....esto con el fin de poder trabajar con o sin conexion a Internet.... me puedes ayudar ?. Gracias

    Gracias

    ResponderEliminar
  33. como le aria para recuperar el dato del radiobutton y de un checkbox y luego modificarlo :D gracias

    ResponderEliminar
  34. RAMIRO, EXCELENTE APORTE, COMO GAFO PARA HACER EL LLAMADO DE LA IMAGEN Y ABRA LA FOTOTECA, UNA VES CARGADA EN EL AGREGAR_MIEMBRO, AL DARLE AGREGAR SE META EN LA BD. SALUDOS Y SIGUE APORTANDO, CUANDO UNO REGALA INTELIGENCIA SE HACE SABIO!!!!

    ResponderEliminar
  35. ESTIMADO RAMIRO GRACIAS POR TODA LA AYUDA, TENGO UN PROBLEMA NECESITO PASAR EL NUMERO DE TELEFONO AL MODAL DONDE ESTA LA VARIABLE TXTSMG. ASI ENVIO UN SMS Y EL USUARIO NO TIENE QUE ESCRIBIR EL NUMERO PORQUE YA APARECE AUTOMATICAMENTE.

    //COMO IGUALO LA VA RIABLE txtMsg AL CONTENIDO DEL PUTEXTRA TELEFONO?

    //.....
    final EditText txtPhone = (EditText) dialoglayout.findViewById(R.id.txtPhone);
    final EditText txtMsg = (EditText) dialoglayout.findViewById(R.id.txtMsg);
    final Button btnSend = (Button) dialoglayout.findViewById(R.id.btnSend);

    //.....
    persona = baseDatos.getPersona(p_id);

    // Se dirige a la actividad EditarPersonaActivity.
    Intent actividad_editarPersona = new Intent(this, EditarPersonaActivity.class);

    // Se le coloca parametros para enviar a la actividad EditarPersonaActivity.
    actividad_editarPersona.putExtra("id", p_id);
    actividad_editarPersona.putExtra("nombre", persona.getNombre());
    actividad_editarPersona.putExtra("correo", persona.getCorreo());
    actividad_editarPersona.putExtra("telefono", persona.getTelefono());
    actividad_editarPersona.putExtra("cedula", persona.getCedula());
    actividad_editarPersona.putExtra("ruta_imagen", persona.getRutaImagen());

    AGRADEZCO TU PRONTA RESPUETA Y MIL GRACIAS POR EL APOYO!!! EXITOS

    ResponderEliminar
  36. Buenas tardes compañero, lo he realizado siguiendo los pasos y genial, puedo añadir sin problema, pero cuando pincho encima de uno para modificarlo o eliminarlo se cierra la aplicacion, no tengo ningun error marcado. saludos y gracias.

    ResponderEliminar
  37. buen dia Rodrigo, soy de Perú quiero hacerte algunas consultas sería que puedo agregarte por watsap!!! con respecto a android, ahora estoy usando android 2.0 pero tengo muchas dudas al respecto.
    Saludos!!!!

    ResponderEliminar
  38. hola rodrigo buen dia quisiera saver como puedo hacer con barias tablas saludos y muchas gracias

    ResponderEliminar
  39. Hola me ha servido un monton muchas gracias, pero me podrias ayudar a saber como hago una busqueda de los registros y la muestro? es que no entiendo muy bien como, gracias de ante mano.

    ResponderEliminar
  40. Dos consultas , soy nuevo en esto, si deseo utilizarlo con bd mysql , funcionaria igual o que cambios se tendrian que hacer?, y segunda consulta , que se deberia hacer para eliminar solo dando click a la opcion en el listview?, gracias de antemano

    ResponderEliminar
  41. Hola, disculpa porque el id debe llamarse _id? es decir, tengo una base de datos que tiene distinto nombre al id y cuando lo corro me dice que falta el _id, se puede cambiar eso? o como podría arreglarlo? saludos

    ResponderEliminar
  42. como se crea el AndroidManifest.xml

    ResponderEliminar
  43. Hola Ramiro, que tal?, me a ayudado mucho este tuto y el de ListView llama a otra clase, pero tengo una consulta, quiero hacer un ListView como este que se pueda agregar otra casilla, que se puedan editar y eliminar y que tambien pueda abra otra activity, lo que hice es que al presionar un boton que tiene cada casilla del ListView, sea el que active el metodo de editar para que al presionar una casilla del Listview lleve a otra clase pero revise ambos tutos y el de Listview llama a otra clase usa ArrayAdapter y este de agregar-actualizar-eliminar usa SimpleCursosAdapter, cual uso?

    ResponderEliminar
  44. Buenas días, ante todo felicitarlo por el recurso brindado, tengo una consulta, cuando ejecuto mi app me manda un error en el que he detectado que es por el SimpleCursorAdapter y creo que es porque lo estoy trabajando en un fragment, no se si habrá manera de resolver este problema, gracias de antemano

    ResponderEliminar
  45. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  46. hola, necesito ayuda haciendo un HighScore, estoy realizando un juego y quiero agregarle eso, no se como hacer que cada participante agregue su nombre y apellido se muestre junto con su puntaje, ordenándolo de mayor a menor, y cada que se ingrese un mismo nombre sólo se actualice el puntaje.

    ResponderEliminar
  47. amigo como soluciono el problema que me da al cargar tu proyecto
    [no toolchains found in the NDK toolchains folder for ABI with prefix: mipsel-linux-android]

    ResponderEliminar
  48. Excelente información, oye amigo una pregunta podrías ayudarme a resolver una duda,la cual es como guardar información desde una listview.

    ResponderEliminar
  49. Excelente buen tutorial.
    Tiene RecycleView Agregar/Actualizar/Eliminar, guardando en la memoria o arraylist. Sin usar base de datos sqllist

    ResponderEliminar