Muy buenas foreros! En primer lugar quiero decir que me siento muy agusto de participar en esta comunidad, ya que llevo bastante tiempo leyendo muchos posts y temas del foro y la verdad es que me gusta bastante.
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:
/**
* 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();
}
}
Y en la clase donde me permite modificar los datos mediante una actividad con textview y demás es la siguiente:
Código:
// 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;
}
}
Si necesitais mayor información o algo no dudeis en pedirmela.
Muchísimas gracias de antemano, me sería de gran utilidad.
Un fuerte abrazo! :)