Espero poder aportar mi granito de arena y poco a poco poder ayudar en la medida que se pueda.
Os traigo un problema que me surge ya que soy bastante inexperto en este lenguaje, llevo bastante poco con la programación android y la verdad estoy haciendo un proyecto y se me echa la hora encima y no consigo averiguarlo.
Os pongo en situación, en primer lugar estoy haciendo una aplicación android que trata sobre una agenda la cual permite insertar, modificar y eliminar contactos.
El tema está en que todo lo hace bien menos cuando voy a modificar contacto. Me salta el famoso NullPointerException que por lo que tengo entendido es que el valor de una variable que haya declarado lo toma como nulo, pero no consigo ver el error y alomejor es más tonto de lo que parece. A ver si me podéis ayudar.. os pongo el código!
Cabe destacar que cuando pulso sobre un usuario para modificar directamente me pega el error, no llega a abrir la ventana de edición para cambiarle los datos ni siquiera ..
En la clase de la base de datos tengo este método para actualizar:
Código:
Y en la clase donde me permite modificar los datos mediante una actividad con textview y demás es la siguiente:/** * Metodo publico para actualizar una persona. */ public void actualizarRegistros(int id, String nombre, String apellido, String edad,String telefono, String ruta_imagen){ ContentValues actualizarDatos = new ContentValues(); actualizarDatos.put("nombre", nombre); actualizarDatos.put("apellido", apellido); actualizarDatos.put("edad", edad); actualizarDatos.put("telefono", telefono); actualizarDatos.put("ruta_imagen", ruta_imagen); String where = "_id=?"; String[] whereArgs = new String[] {String.valueOf(id)}; try{ this.getReadableDatabase().update("Personas", actualizarDatos, where, whereArgs); } catch (Exception e){ String error = e.getMessage().toString(); } }
Código:
Si necesitais mayor información o algo no dudeis en pedirmela. // Recupera en un Objeto Bundle si tiene valores que fueron pasados como // parametro de una actividad. extras = getIntent().getExtras(); if (estadoEditarPersona()) { editTextNombre.setText(extras.getString("nombre")); editTextApellido.setText(extras.getString("apellido")); editTextEdad.setText(extras.getString("edad")); editTextTelefono.setText(extras.getString("telefono")); // Se coloca la imagen de una persona. ruta_imagen = extras.getString("ruta_imagen"); Bitmap bitmap = getBitmap(ruta_imagen); // La imagen no puede ser mayor a 2048 de ancho o alto. if (bitmap.getHeight() >= 2048 || bitmap.getWidth() >= 2048) { bitmap = Bitmap.createScaledBitmap( bitmap, (bitmap.getHeight() >= 2048) ? 2048 : bitmap .getHeight(), (bitmap.getWidth() >= 2048) ? 2048 : bitmap .getWidth(), true); } imagenPersona.setImageBitmap(bitmap); } /** * Metodo privado que edita una persona existente. */ private void editarPersona() { baseDatos = new DatabaseHandler(EditarPersonaActivity.this); try { // Crear objeto persona. int id = extras.getInt("id"); Persona persona = new Persona(id, editTextNombre.getText() .toString(), editTextApellido.getText().toString(), editTextEdad.getText().toString(), editTextTelefono.getText().toString(), ruta_imagen); baseDatos.actualizarRegistros(id, persona.getNombre(), persona.getApellido(), persona.getEdad(),persona.getTelefono(), persona.getRutaImagen()); mensaje.mostrarMensajeCorto("Se cambio correctamente el registro!!!"); } catch (Exception e) { mensaje.mostrarMensajeCorto("Error al querer editar un registro!!!"); e.printStackTrace(); } finally { baseDatos.cerrar(); } } /** * */ public boolean estadoEditarPersona() { // Si extras es diferente a null es porque tiene valores. En este caso // es porque se quiere editar una persona. if (extras != null) { return true; } else { return false; } }
Muchísimas gracias de antemano, me sería de gran utilidad.
Un fuerte abrazo! :)