Foros del Web » Programando para Internet » Android »

Null Pointer Exception al editar contacto

Estas en el tema de Null Pointer Exception al editar contacto en el foro de Android en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 23/11/2013, 19:55
 
Fecha de Ingreso: noviembre-2013
Mensajes: 4
Antigüedad: 10 años, 5 meses
Puntos: 0
Pregunta Null Pointer Exception al editar contacto

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! :)
  #2 (permalink)  
Antiguo 24/11/2013, 15:22
Avatar de ggomez91  
Fecha de Ingreso: octubre-2008
Mensajes: 181
Antigüedad: 15 años, 6 meses
Puntos: 13
Respuesta: Null Pointer Exception al editar contacto

En qué línea te da el Null? puedes poner el método entero también?
  #3 (permalink)  
Antiguo 24/11/2013, 17:29
 
Fecha de Ingreso: noviembre-2013
Mensajes: 4
Antigüedad: 10 años, 5 meses
Puntos: 0
Pregunta Respuesta: Null Pointer Exception al editar contacto

Gracias por responder, pues el error que me sale es el siguiente

http://www.casimages.es/i/131125121317879440.png.html

Me falla desde que metí el campo Telefono, antes cuando solo tenia los campos Nombre, Apellidos y edad si me realizaba todo correctamente.. y no encuentro la forma de verdad..

Y los métodos que tienen las clases que contienen la edición es lo siguiente :

Clase de la base de datos:
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();
		}
	}
	
	/**
	 * Metodo publico que retorna una persona especifica.
	 * @param id
	 * @return
	 */
	public Persona getPersona(int p_id) {
	    String[] columnas = new String[]{"_id", "nombre", "apellido", "edad", "telefono", "ruta_imagen"};
	    Cursor cursor = this.getReadableDatabase().query("Personas", columnas, "_id" + "= " + p_id, null, null, null, null,null);
	
	    if (cursor != null){
	    	cursor.moveToFirst();
	    }
	    	
		Persona persona = new Persona(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3),
		    cursor.getString(4), cursor.getString(5));
		    
		// Retorna la persona especifica.
		return persona;
	}
		
		
	/**
	 * Metodo publico que devuelve todas las personas.
	 * @return
	 */
	public Cursor obtenerTodasPersonas(){
		//String[] columnas = new String[]{"_id", "nombre", "apellido", "edad", "telefono", "ruta_imagen"};
		Cursor cursor = this.getReadableDatabase().rawQuery("select * from personas",null);
		//Cursor cursor = this.getReadableDatabase().query("Personas", columnas, null, null, null, null, null, null);
		
		if(cursor != null) {
		    cursor.moveToFirst();
		}
		return cursor;
	}
Clase EditarPersonaActivity
Código:
		// Se crea el objeto mensaje.
		mensaje = new Mensaje(getApplicationContext());

		
		// 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);
		}

	/**
	 * Metodo privado que verifica que se cambio el valor del telefono o no esta¡
	 * en blanco (vacio).
	 */
	private boolean verificarCampoTelefono() {
		if (editTextTelefono.getText().toString().equals("")) {
			return false;
		}
		return true;
	}
	

	/**
	 * 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;
		}
	}

}
Clase MainActivity
Código:
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.activity_main);
		
		// Hace referencia a la parte xml (activity_main.xml).
		listViewPersonas = (ListView) findViewById(R.id.listViewPersonas);
		botonAgregarPersona = (Button)findViewById(R.id.botonAgregarPersona);
		
		// Se recuperan todas las personas de la base de datos.
		recuperarTodasPersonas();
		
		// Asociamos los menus contextuales al listViewPersonas.
	    registerForContextMenu(listViewPersonas);
	}
	
	/**
	 * Metodo publico que se sobreescribe. En este metodo crearmos el menu contextual
	 * para el ListView de personas. 
	 */
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){
	    super.onCreateContextMenu(menu, v, menuInfo);
	    android.view.MenuInflater inflater = getMenuInflater();
	    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
	    inflater.inflate(R.menu.opciones_personas, menu);
	}
		
	/**
	 * Metodo publico que se sobreescribe. En este metodo colocamos las acciones de las opciones del menu contextual
	 * para el ListView de personas. 
	 */
	@Override
	public boolean onContextItemSelected(android.view.MenuItem item) {
		AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
		
	    switch (item.getItemId()) {
	        case R.id.menu_contextual_editar_persona:
	        	editarPersona((int)info.id);
	            return true;
	        case R.id.menu_contextual_llamar_persona:
	        	llamar((int)info.id);
	        	return true;    
	        case R.id.menu_contextual_eliminar_persona:
	        	eliminarPersona((int)info.id);
	        	recuperarTodasPersonas();
	            return true;
	        default:
	            return super.onContextItemSelected((android.view.MenuItem) item);
	    }
	}

	/**
	 * Metodo privado que recupera todos las personas existentes de la base de datos.
	 */
	private void recuperarTodasPersonas() {
		try{
			baseDatos = new DatabaseHandler(this);
			
			// Devuelve todas las personas en el objeto Cursor.
			Cursor cursor = baseDatos.obtenerTodasPersonas();
		
		    String[] from = new String[]{
		    	"nombre", 
		    	"apellido", 
		    	"edad",
		    	"telefono",
		    	"ruta_imagen"
		    };
			    
		    int[] to = new int[]{
		    	R.id.TextViewNombre,
		    	R.id.TextViewApellido,
		    	R.id.TextViewEdad,
		    	R.id.textViewTelefono,
		    	R.id.thumb_persona,
		    };
	    	cursorAdapter = new ImagenAdapter(this, cursor, from, to);
	    	listViewPersonas.setAdapter(cursorAdapter);
	    }catch(Exception e){
	    	Log.d("Error", "El mensaje de error es: " + e.getMessage());
	    }finally{
	    	// Se cierra la base de datos.
	    	baseDatos.cerrar();
	    }
	}
	
	/**
	 * Metodo publico que edita una persona.
	 * @param p_id
	 */
	public void editarPersona(int p_id){
		// Si el p_id es 0, entonces se crea una nueva persona.
		if(p_id == 0){
			// Se dirige a la actividad EditarPersonaActivity.
	        Intent actividad_editarPersona = new Intent(MainActivity.this, EditarPersonaActivity.class);
	        startActivityForResult(actividad_editarPersona, CODIGO_RESULT_EDITAR_PERSONA); 
		}else{
			// Recupera una persona especifica.
			Persona persona;
			
			try{    		
				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("apellido", persona.getApellido());
		        actividad_editarPersona.putExtra("edad", persona.getEdad());
		        actividad_editarPersona.putExtra("telefono",persona.getTelefono());
		        actividad_editarPersona.putExtra("ruta_imagen", persona.getRutaImagen());
		            
		        startActivityForResult(actividad_editarPersona, CODIGO_RESULT_EDITAR_PERSONA); 
			}catch (Exception e){
			     Toast.makeText(getApplicationContext(), "Error al editar persona!!!", Toast.LENGTH_SHORT).show();
			     e.printStackTrace();
			}finally{
			     baseDatos.cerrar();
			}
		}
	}
	
	/**
	 * El metodo protegido se sobreescribe. Se llama con el resultado de otra actividad
	 * requestCode es el codigo original que se manda a la actividad
	 * resultCode es el codigo de retorno, 0 significa que todo sale bien
	 * intent es usado para obtener alguna informacion del caller.
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
	    super.onActivityResult(requestCode, resultCode, intent);
	    recuperarTodasPersonas();
	}
} // Fin de la actividad MainActivity.

En teoría falla por lo que puedo leer en la clase EditarPersonaActivity pero por más que miro no encuentro el fallo.. muchas gracias nuevamente por las molestias tomadas! :)
  #4 (permalink)  
Antiguo 24/11/2013, 17:54
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Null Pointer Exception al editar contacto

Según el stack trace (incompleto) que nos pusiste dice que el error esta en la clase EditarPersonaActivity en el método onCreate (que parece que no pusiste, o si lo pusiste no lo copiaste entero).

Podría suponer que alguno de de tus:
editText no los encuentra y te los pone como null, o simplemente no los estas inicializando.

Te recomiendo usar el debugger.

Pones un break point en tu método onCreate en la clase EditarPersonaActivity, vas checando linea a linea y con el visor de variables cual variable esta en null.
  #5 (permalink)  
Antiguo 24/11/2013, 19:20
 
Fecha de Ingreso: noviembre-2013
Mensajes: 4
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Null Pointer Exception al editar contacto

Muchas gracias por responder, pues me da error en el Bundle savedInstanceState, al hacer el debug me muestra que cuando selecciono un usuario del listview y le doy a la opción editar me muestra que savedInstanceState tiene valor null..

Me podrían decir como conseguir que ese valor no fuese nulo? Perdonen mi inexperiencia en este mundo, llevo bastante poco tiempo y me urge..

Coloco el código para que no haya dudas sobre la clase EditarPersonaActivity

Código:
public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.editar_persona);

		// Hace referencia a los objetos xml.
		butonGuardar = (Button) findViewById(R.id.botonGuardar);
		butonLimpiar = (Button) findViewById(R.id.botonLimpiar);
		editTextNombre = (EditText) findViewById(R.id.editTextNombre);
		editTextApellido = (EditText) findViewById(R.id.editTextApellido);
		editTextEdad = (EditText) findViewById(R.id.editTextEdad);
		editTextTelefono = (EditText) findViewById(R.id.editTextTelefono);
		checkBoxCicloAcabado=(CheckBox) findViewById(R.id.checkBoxCicloAcabado);
		botonImagenPersona = (Button) findViewById(R.id.botonAgregarImagenPersona);
		imagenPersona = (ImageView) findViewById(R.id.imagenPersona);

		// Se crea el objeto mensaje.
		mensaje = new Mensaje(getApplicationContext());

		/**
		 * Al hacer click en el boton imagen se abre una ventana.
		 */
		botonImagenPersona.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				ventanaImagen();
			}
		});
		// 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"));
			
			checkBoxCicloAcabado.setOnClickListener(new View.OnClickListener() 
		        {
		            public void onClick(View v) {
		                if (((CheckBox)v).isChecked()==true) {
		                	
		                	String cursoacabado="Curso Acabado";
		                	checkBoxCicloAcabado.setText(extras.getString(cursoacabado));
		                	
		                }else if (((CheckBox)v).isChecked()==false){
		                	
		                	String cursoacabado="Curso NO acabado";
		                	checkBoxCicloAcabado.setText(extras.getString(cursoacabado));
		                }
		                   
		            }
		        });
			
			// 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);
		}

		// Agrega nuevo registro de una persona.
		butonGuardar.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				if (verificarCampoNombre() && verificarCampoApellido()
						&& verificarCampoEdad() && verificarCampoTelefono()) {
					if (estadoEditarPersona()) {
						editarPersona();
					} else {
						insertarNuevoPersona();
					}
					// Finaliza la actividad EditarPersonaActivity.
					finish();
				} else {
					if (editTextNombre.getText().toString().equals("")) {
						mensaje.mostrarMensajeCorto("Introduzca un Nombre!!!");
					}
					if (editTextApellido.getText().toString().equals("")) {
						mensaje.mostrarMensajeCorto("Introduzca un Apellido!!!");
					}
					if (editTextEdad.getText().toString().equals("")) {
						mensaje.mostrarMensajeCorto("Introduzca una Edad!!!");
					}
					
					
					if (editTextTelefono.getText().toString().equals("")) {
						mensaje.mostrarMensajeCorto("Introduzca un telefono!!!");
					}
					
				}
			}
		});
	

	/**
	 * Metodo privado que insertar una nueva Persona.
	 */
	private void insertarNuevoPersona() {
		baseDatos = new DatabaseHandler(EditarPersonaActivity.this);

		try {
			// Crear objeto Persona.
			Persona persona = new Persona(editTextNombre.getText().toString(),
					editTextApellido.getText().toString(), editTextEdad
							.getText().toString(), editTextTelefono.getText().toString(), checkBoxCicloAcabado.getText().toString(), ruta_imagen);

			// Se inserta una nueva persona.
			baseDatos.insertarPersona(persona);
		} catch (Exception e) {
			mensaje.mostrarMensajeCorto("Error al insertar!!!");
			e.printStackTrace();
		} finally {
			// Se cierra la base de datos.
			baseDatos.cerrar();
		}
	}

	/**
	 * 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(), checkBoxCicloAcabado.getText().toString(), ruta_imagen);

			baseDatos.actualizarRegistros(id, persona.getNombre(),
					persona.getApellido(), persona.getEdad(), persona.getTelefono(), persona.getCursoAcabado(),
					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;
		}
	}

	/**
	 * Metodo privado que abre la ventana.
	 */
	private void ventanaImagen() {
		try {
			final CharSequence[] items = { "Seleccionar de la galeria" };

			AlertDialog.Builder builder = new AlertDialog.Builder(this);
			builder.setTitle("Seleccionar una foto");
			builder.setItems(items, new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int item) {
					switch (item) {
						case 0:
							Intent intentSeleccionarImagen = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI);
							intentSeleccionarImagen.setType("image/*");
							startActivityForResult(intentSeleccionarImagen, SELECCIONAR_IMAGEN);
							break;
						}
				}
			});
			AlertDialog alert = builder.create();
			alert.show();
		} catch (Exception e) {
			mensaje.mostrarMensajeCorto("El error es: " + e.getMessage());
		}
	}

	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);

		try {
			if (requestCode == SELECCIONAR_IMAGEN) {
				if (resultCode == Activity.RESULT_OK) {
					Uri selectedImage = data.getData();
					ruta_imagen = obtieneRuta(selectedImage);
					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);
					} else {
						imagenPersona.setImageURI(selectedImage);
					}
				}
			}
		} catch (Exception e) {
		}

	}

	private Bitmap getBitmap(String ruta_imagen) {
		// Objetos.
		File imagenArchivo = new File(ruta_imagen);
		Bitmap bitmap = null;

		if (imagenArchivo.exists()) {
			bitmap = BitmapFactory.decodeFile(imagenArchivo.getAbsolutePath());
		}
		return bitmap;
	}

	/**
	 * Metodo privado
	 * 
	 * @param uri
	 * @return
	 */
	private String obtieneRuta(Uri uri) {
		String[] projection = { android.provider.MediaStore.Images.Media.DATA };
		Cursor cursor = managedQuery(uri, projection, null, null, null);
		int column_index = cursor
				.getColumnIndexOrThrow(android.provider.MediaStore.Images.Media.DATA);
		cursor.moveToFirst();
		return cursor.getString(column_index);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case android.R.id.home:
			Intent intent = new Intent(this, MainActivity.class);
			intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
			startActivity(intent);

			// Cerrar EditarPersonaActivity.
			EditarPersonaActivity.this.finish();

			return true;
		default:
			return super.onOptionsItemSelected(item);
		}
	}
}
  #6 (permalink)  
Antiguo 24/11/2013, 23:13
Avatar de ggomez91  
Fecha de Ingreso: octubre-2008
Mensajes: 181
Antigüedad: 15 años, 6 meses
Puntos: 13
Respuesta: Null Pointer Exception al editar contacto

Hola, ya viendo tu código es claro que el null pasa en la linea 91 de esa clase:

if (editTextEdad.getText().toString().equals("")) {

Así que lo que es nulo es editTextEdad o el retorno de getText. Yo te sugiero que verifiques que exista el R.id.editTextEdad en la vista que estas usando (R.layout.editar_persona). Verifica con el debugger o un Log.d que en la linea 11 el objeto no sea nulo.

editTextEdad = (EditText) findViewById(R.id.editTextEdad);

Si eso está bien (que yo creo que sí) entonces es el getText, el cual intentas inicializar en la linea 35:
editTextEdad.setText(extras.getString("edad"));

Mi mejor idea es que extras.getString("edad") viene Null y de ahí todo, puedes probar con el debugger en esa linea o un Log.d. También puedes cambiar el valor del setText de forma que le hardodees un string cualquiera y si no muere pues es eso, tu extra viene vacío.
  #7 (permalink)  
Antiguo 25/11/2013, 15:09
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Null Pointer Exception al editar contacto

Si, según el error que puso esta en la linea 91, pero como no puso el archivo tal cual. No hay garantía que `if (editTextEdad.getText().toString().equals("")) {` sea la linea donde le esta dando problemas.

A menos que ponga el archivo tal cual y ponga el error es donde le podemos decir donde exactamente esta su error.

Etiquetas: java, modificar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:55.