Nullpointerexception sin motivo

LLoid

Aquí vuelvo con otra duda absurda, a ver si alguien me echa una mano.

A la hora de ejecutar la app, al entrar en esta actividad me salta un nullpointerexception con este logcat:

06-18 01:42:06.478: E/AndroidRuntime(1768): FATAL EXCEPTION: main
06-18 01:42:06.478: E/AndroidRuntime(1768): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.project/com.example.project.Planificacion_proyecto}: java.lang.NullPointerException
06-18 01:42:06.478: E/AndroidRuntime(1768): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
06-18 01:42:06.478: E/AndroidRuntime(1768): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
06-18 01:42:06.478: E/AndroidRuntime(1768): 	at android.app.ActivityThread.access$600(ActivityThread.java:123)
06-18 01:42:06.478: E/AndroidRuntime(1768): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
06-18 01:42:06.478: E/AndroidRuntime(1768): 	at android.os.Handler.dispatchMessage(Handler.java:99)
06-18 01:42:06.478: E/AndroidRuntime(1768): 	at android.os.Looper.loop(Looper.java:137)
06-18 01:42:06.478: E/AndroidRuntime(1768): 	at android.app.ActivityThread.main(ActivityThread.java:4424)
06-18 01:42:06.478: E/AndroidRuntime(1768): 	at java.lang.reflect.Method.invokeNative(Native Method)
06-18 01:42:06.478: E/AndroidRuntime(1768): 	at java.lang.reflect.Method.invoke(Method.java:511)
06-18 01:42:06.478: E/AndroidRuntime(1768): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-18 01:42:06.478: E/AndroidRuntime(1768): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-18 01:42:06.478: E/AndroidRuntime(1768): 	at dalvik.system.NativeStart.main(Native Method)
06-18 01:42:06.478: E/AndroidRuntime(1768): Caused by: java.lang.NullPointerException
06-18 01:42:06.478: E/AndroidRuntime(1768): 	at com.example.project.Planificacion_proyecto.onCreate(Planificacion_proyecto.java:448)
06-18 01:42:06.478: E/AndroidRuntime(1768): 	at android.app.Activity.performCreate(Activity.java:4492)
06-18 01:42:06.478: E/AndroidRuntime(1768): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
06-18 01:42:06.478: E/AndroidRuntime(1768): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
06-18 01:42:06.478: E/AndroidRuntime(1768): 	... 11 more

Y aquí es donde me salta la excepción:

	TextView tvsp26intro = (TextView) findViewById(R.id.TextView72); //<< aquí
	TextView tvsp27intro = (TextView) findViewById(R.id.TextView82);
	TextView tvsp32intro = (TextView) findViewById(R.id.TextView98);

El caso es que está todo bien definido, el string está con su nombre en strings.xml, el int está bien definido, el editText está bien definido... Le estoy dando vueltas y no termino de ver el fallo. He probado a comentar esa línea y el nullpointer se pasa a la siguiente, así que definitivamente no sé que puede ser xD

En fin, si me echáis una mano genial, saludos.

JuAn4k4

¿ No sera que tu actividad se ejecuta antes de que R se inicialice ? No se casi nada de Android, pero se que R son los recursos, y tu actividad se ejecuta en la inicialización, vete tu a saber si puedes definir el orden de tus tareas y se ejecuta antes, no lo se.

pon un if (R != null && R.id != null && R.id.TextView72 != null) , y pon en alguna consola o algo a ver cual de ellos es null, y luego ya, mirar a ver por qué.

3 respuestas
bLero

#1 Ojo con qué R tienes importado.

Android.R

o

com.tuproyecto.R

2 1 respuesta
Tig

Haz un clean y reinicia, eclipse a veces se ralla

1 1 respuesta
LLoid

#2 Hola, pues la verdad es que no tengo ni idea, voy a probar lo que me dices y comento xD
#3 ¿Cómo puedo mirarlo? Me da la impresión de que el problema es con el fichero R, porque cuando estaba haciendo la interfaz con el editor visual me saltaba de vez en cuando un nullpointerexception (en el propio editor, no a la hora de ejecutar) y me quedaba a cuadros, pero luego se recuperaba, así que no le dí mucha importancia. Luego pongo una screen que lo muestre.

Creo que el problema está ahí porque las referencias están todas correctas, de hecho el autocompletar me muestra R.id.TextView72, pero luego con el debugger tvsp26intro sale a null, así que ni idea...

#4 Ya le he hecho clean 20 veces xD y he copiado y pegado el código en otra activity (tanto el .java como la interfaz) y nada de nada, ahora probaré con otro proyecto nuevo y copiando todo el código a ver.

Estos son mis imports, no hay ningún R ni nada:

package com.example.project;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.Html;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.Spinner;
import android.widget.TextView;
1 respuesta
elkaoD

#5 yo apuesto por que es el proceso de build y tu R no se está generando bien. Comprueba que los XML estén bien y mira en la pestaña de Errors que no haya ningún warning/error de los XML. Echa un vistazo también a la salida de Ant/Maven o lo que quiera que haga tu build.

1 respuesta
LLoid

#6 Tengo 0 errors, 270 warnings xD Estoy hardcodeando los strings porque si no es un coñazo. Yo también creo que es error del R, pero en los XML no tengo errores, sólo warnings (de todos modos no compila si hay errores en los xml, no?)

He probado a hacerle clean 20 veces, si eso no lo arregla... Ahora mismo estoy copiando el código a otro proyecto separado a ver si así funciona. ¿Tiene importancia que haya hecho la interfaz a base de control-c control-v? Cuando me saltaban los nullpointerexception en el editor gráfico era un poco raro, y creo que debe estar relacionado.

1 respuesta
B

#1 un Nullpointerexception nunca es sin motivo xD si se queja es porque ahí hay un null pointer, como dicen cuidado con la R que importas.

Tan simple como verifica si eso es null antes de hacer la asignación, luego ya es cuestión de buscar el problema.

elkaoD

#7 qué warnings?

1 respuesta
LLoid

#9 Los 100 de los 270 que muestra el log son todos de hardcoded string. Voy a ver si consigo sacar los otros 170, aunque estoy casi 100% sguro de que son por el mismo motivo, ahora te comento xD

Edit: También tengo algunos de "Nested weights are bad for performance activity_planificacion_proyecto.xml" y uno que me mosquea, "Duplicate id @+id/SP12Notas, already defined earlier in this layout activity_gestion_configuracion.xml " pero esa activity funciona perfectamente... Y también un "activity_planificacion_proyecto.xml has more than 80 views, bad for performance activity_planificacion_proyecto.xml" pero que le jodan al rendimiento xD

Y acabo de ver un "Duplicate id @+id/TextView89, already defined earlier in this layout activity_planificacion_proyecto.xml" que es la actividad que falla. Pfff voy a ver si es esto, aunque cuando clicko en el logcat para que me lleve al error no me lleva ahí, si no a otro TextView.

1 respuesta
elkaoD

#10 y también como dice #2 dinos qué da la NullPointerEx, ¿R, R.id o R.id.TextView72?

LLoid

Pongo una captura del debugger, para que se vea que tanto ese como los siguientes TV están a null:

Que es lo que más me mosquea, todos están definidos igual y tratados igual, pero se corta ahí sin razón aparente.

En cuanto a lo que dice #2, ¿cómo puedo mirarlo? quiero decir, R y R.id "cannot be referenced to a variable" y "the operator != is undefined for the argument type int, null". ¿Se supone que debería reconocer R y R.id?

2 respuestas
elkaoD

#12 ah bueno claro, que en Java los paquetes no son objetos. Olvídalo xD

La screen... weird total, si te está cargando la mitad de los recursos es que hay algo mal en el XML de canteo. Revísalo.

Huele a que los warnings que no ves son importantes.

1 respuesta
bLero

#12 madre del amor hermoso, ¿para qué necesitas tántos textView dentro de una misma Activity?

Creo que estás haciendo una chapuza con la vista y seguramente haya componentes como Un listView que se adapten mejor a lo que buscas.

En segundo lugar, por favor, pon un nombre identificativo a los textView y en general a todos los componentes para que sepas de cual estás hablando y evitar problemas.

En vez de TextView23492348 pues algo como LoginTextView o LoginLbl o similares. Es importante que escojas una convención de nombrado propia o te acojas al estándar correspondiente.

En esa screen no se está mostrando la traza de error completa, con eso no podemos ayudarte.

#16

Sí, me he dado cuenta ahora, el problema tiene pinta de ser el XML entonces. R falla al parsear en determinada línea y no genera más a partir de ahí.

2 respuestas
LLoid

#13 Muy posible, voy a echarle un ojo con más calma que ya estoy saliendo loco xD

Y joder, muchísimas gracias a todos, si pudiera os invitaba a una caña xDD

1 respuesta
elkaoD

#14 en la screen creo que intentaba mostrar lo de arriba a la derecha, es decir, que hay TextViews que sí se le están inicializando (me ha costado darme cuenta).

#15 yo si fuera tú me ponía con el XML a manubrio y me dejaba de UIs.

PD: me apunto lo de la caña xD

1 respuesta
LLoid

#14 Los TextView creeme que me hacen falta, una listView no me soluciona esa papeleta porque tienen que estar formateados junto con otros controles, algunos más grandes, otros más pequeños... Podría currarme un listview mucho más complejo pero no merece la pena, porque tengo que ir tirando de ficheros y tal para leer texto. Una movida xD

En cuanto a los nombrse descriptivos... Lo hice para los primeros TextView, luego se me hincharon los huevos xD De todos modos como suelo llevar 2 editores abiertos, con alt-tab voy viendo qué TextView tengo que referenciar, etc.

LLoid

Bueno, yo estoy flipando ya xD

Este es el nullpointerexception que me da al tocar en el editor visual:

Como se puede ver, me manda a mirar los detalles de la excepción, que se muestran aquí:

Yo obviamente no tengo ni idea de qué es ese ladrillo de excepción xD

Pero lo mejor de todo es que si os fijáis en la primera captura arriba a la derecha, se ve que hay un LinearLayout con nombre "asdf" que contiene un TextView con nombre "asdf". Cuando cambio el nombre de uno de los 2 se cambia el otro también, lo que me hace pensar que el R.java está tan rallado que una única referencia apunta tanto al textview como al linearlayout, y es por eso que se peta.

Así que nada, he decidido empezar otra actividad de 0 y dejar esta apartada, porque estos errores ya se me quedan grandes xD

Tig

Es una aberración tener tantos textviews, lo raro es que no tengas más errores :P

1 respuesta
LLoid

#19 Ya lo sé ya, pero no me queda más remedio xDD

MTX_Anubis

Has probado a hacer esas vistas en HTML? Yo es lo que hice para una app que tenía bastantes textviews (era una especie de formulario que mostraba mucha información y además hacía falta que tuviera zoom vaya), por quitarme toda la morralla y me fue bien la verdad. No te soluciona el error pero de todas formas, no te fíes de los errores que te da el editor, fiate del que te da el logcat cuando ejecutas la aplicación.

También, he probado el Android Studio este y aun está bastante verde (cree un proyecto e iba bien y al al volverlo a abrir me daba error el propio proyecto xD), yo de momento sigo con eclipse aunque lo odie.

1 respuesta
LLoid

#21 Pues la verdad es que en HTML no se me había ocurrido, pero ya sólo de bajarme un editor aprender a usarlo me da pereza xDD Pero mi app es parecido a un formulario, con un heuvo de campos de entrada y mostrando info tb.

Y el android studio en este mismo foro he leído que se peta bastante, a ver si lo depuran un poco más porque vamos a salir todos locos con el eclipse xD

JuAn4k4

El android studio de intellij idea te marcaria en rojo el xml.

Si tienes dos nodos con el mismo id en el xml, lo mismo al leerlo peta algo por ahi, y lo jode todo.

LLoid

Damas y caballeros, vengo a anunciaros que soy idiota.

Después de 20000 horas buscando el puto error, he dado con él de casualidad. Resulta en el fichero xml de la interfaz asociado a la actividad tenía el contexto correspondiente a otra actividad (cosas del copypaste) y claro, cargaba los controles que había en la otra actividad pero cuando esos "se acababan" y empezaban los de la propia pues nullpointerexception.

Así que nada, voy a cenar llorando entre una mezcla de alegría y orgullo herido xD

2 1 respuesta
Li3cht

#24 El Nullpointerexception es lo que tiene, el 99% de las veces te deja como un tonto xD

1