Estoy haciendo una pequeña
activity en la que he puesto un
EditText para introducir un año. Quiero validar que el número que se introduce esté entre 1950 y 2014.
El campo lo he definido de la siguente manera en el
layaout.xml <EditText
android:id="@+id/campoAnno"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/campoPais"
android:layout_alignTop="@+id/etiquetaAnno"
android:ems="10"
android:inputType="number" />
En el evento
onCreate de la
activity estoy intentando añadirle al campo un evento que haga la validación del rango. He probado añadiendo al campo un evento
onFocusChangeListener. He probado a añadirle un
TextWatcher. Y he probado a añadirle un
InputFilter.
En los tres casos obtengo un error
java.lang.NullPointerException en el momento de ejecutarse el método
onCreate de la
activity y no soy capaz de ver que es lo que hago mal.
Este el el método
onCreate con el código que he puesto para añadir el
onFocusChangeListener (Funciona perfectamente si le quito el código de añadir el
onFocusChangeListener):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_travel);
EditText campoAnno = (EditText) findViewById( R.id.campoAnno );
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
else {
EditText campoCiudad = (EditText) findViewById( R.id.campoCiudad );
EditText campoComentarios = (EditText) findViewById( R.id.campoComentarios);
EditText campoPais = (EditText) findViewById( R.id.campoPais );
// Cargar el contenido de los campos
campoCiudad.setText( savedInstanceState.getCharSequence("ciudad" ) );
campoPais.setText( savedInstanceState.getCharSequence( "pais" ) );
campoAnno.setText( savedInstanceState.getCharSequence( "anno" ) );
campoComentarios.setText( savedInstanceState.getCharSequence( "comentarios" ) );
}
campoAnno.setOnFocusChangeListener( new OnFocusChangeListener() {
@Override
public void onFocusChange
(View v,
boolean hasFocus
) {
if ( !hasFocus ) {
int valor
= Integer.
parseInt( v.
toString() );
if ( valor < 1950 || valor > 2014 ) {
Toast.makeText( getApplicationContext()
, getString( R.string.anno_fuera_rango )
, Toast.LENGTH_SHORT ).show();
}
}
}
});
}
Y esto es lo que me sale en la consola de log al ejecutarse:
04-13 15:18:26.958: E/AndroidRuntime(1179): FATAL EXCEPTION: main
04-13 15:18:26.958: E/AndroidRuntime(1179): Process: com.example.uax_ef_03_01_edit_travel_activity, PID: 1179
04-13 15:18:26.958: E/AndroidRuntime(1179): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.uax_ef_03_01_edit_travel_activity/com.example.uax_ef_03_01_edit_travel_activity.EditTravelActivity}: java.lang.NullPointerException
04-13 15:18:26.958: E/AndroidRuntime(1179): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
04-13 15:18:26.958: E/AndroidRuntime(1179): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
04-13 15:18:26.958: E/AndroidRuntime(1179): at android.app.ActivityThread.access$800(ActivityThread.java:135)
04-13 15:18:26.958: E/AndroidRuntime(1179): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
04-13 15:18:26.958: E/AndroidRuntime(1179): at android.os.Handler.dispatchMessage(Handler.java:102)
04-13 15:18:26.958: E/AndroidRuntime(1179): at android.os.Looper.loop(Looper.java:136)
04-13 15:18:26.958: E/AndroidRuntime(1179): at android.app.ActivityThread.main(ActivityThread.java:5017)
04-13 15:18:26.958: E/AndroidRuntime(1179): at java.lang.reflect.Method.invokeNative(Native Method)
04-13 15:18:26.958: E/AndroidRuntime(1179): at java.lang.reflect.Method.invoke(Method.java:515)
04-13 15:18:26.958: E/AndroidRuntime(1179): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-13 15:18:26.958: E/AndroidRuntime(1179): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-13 15:18:26.958: E/AndroidRuntime(1179): at dalvik.system.NativeStart.main(Native Method)
04-13 15:18:26.958: E/AndroidRuntime(1179): Caused by: java.lang.NullPointerException
04-13 15:18:26.958: E/AndroidRuntime(1179): at com.example.uax_ef_03_01_edit_travel_activity.EditTravelActivity.onCreate(EditTravelActivity.java:41)
04-13 15:18:26.958: E/AndroidRuntime(1179): at android.app.Activity.performCreate(Activity.java:5231)
04-13 15:18:26.958: E/AndroidRuntime(1179): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
04-13 15:18:26.958: E/AndroidRuntime(1179): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
04-13 15:18:26.958: E/AndroidRuntime(1179): ... 11 more
¿Alguien puede decirme que hago mal?
Por cierto: estoy compilando con el API19 y compatibilidad desde el API8
Muchas gracias.