Ver Mensaje Individual
  #5 (permalink)  
Antiguo 24/11/2013, 19:20
Migueterry
 
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);
		}
	}
}