Странное исключение NullpointerException при попытке получить LinearLayout - PullRequest
1 голос
/ 20 ноября 2011

Это немного выстрел в темноте, но, возможно, я делаю очевидную ошибку; У меня есть LinearLayout, определенный в моем main.xml, с идентификатором "@ + id / imageListContainer". В моем main.xml больше ничего нет, и LinearLayout совершенно прост (как eclipse вставляет его для вас из редактора GUI).

    <LinearLayout
        android:id="@+id/imageListContainer"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">
    </LinearLayout>

Затем я хочу динамически заполнить LinearLayout, используя этот код:

LinearLayout imageContainer = (LinearLayout)findViewById(R.id.imageListContainer);

из внутри функции обратного вызова приложения onCreate ().

Раньше это работало нормально. Однако, когда я начал добавлять фрагменты кода здесь и там (в основном в других действиях), в какой-то момент он перестал работать, и теперь я последовательно получаю нулевой указатель с помощью findViewById (). Я попытался заново сгенерировать R.java, переименовав LinearLayout (чтобы убедиться, что у меня есть контроль с того места, к которому был получен доступ, но доступ к нему возможен только из этого одного места) Вместо этого я попытался поместить код в onStart (), думая, что onCreate может работать слишком рано, создавая условия гонки, но и с этим не повезло. Я также убедился, что LinearLayout действительно называется «imageListContainer», что и есть (в противном случае сгенерированный R.java будет неправильным, а javac все равно будет жаловаться) и что нигде не будет дублированного объекта «imageListContainer».

Я в значительной степени растерялся относительно причины этого, поэтому буду признателен за любые предложения или предположения.

Вот трассировка стека:

E/AndroidRuntime(  327): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime(  327): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.company.PictureListView/com.company.PictureListView.PictureListView.PictureListActivity}: java.lang.NullPointerException
E/AndroidRuntime(  327):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
E/AndroidRuntime(  327):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
E/AndroidRuntime(  327):        at android.app.ActivityThread.access$2200(ActivityThread.java:119)
E/AndroidRuntime(  327):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
E/AndroidRuntime(  327):        at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  327):        at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(  327):        at android.app.ActivityThread.main(ActivityThread.java:4363)
E/AndroidRuntime(  327):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  327):        at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(  327):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime(  327):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime(  327):        at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(  327): Caused by: java.lang.NullPointerException
E/AndroidRuntime(  327):        at com.company.PictureListView.PictureListActivity.updateMainActivityScreen(PictureListActivity.java:50)
E/AndroidRuntime(  327):        at com.company.PictureListPictureListActivity.onCreate(PictureListActivity.java:38)
E/AndroidRuntime(  327):        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(  327):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)

PS: Я забыл упомянуть, я также назвал setContentView (R.layout.main), так что это тоже не проблема.

PSS: Я попытался вместо этого добавить кнопку в графический интерфейс, а затем вызвать код, содержащий findViewById () внутри обратного вызова для этой кнопки, и это работает! Это возвращает меня к мысли, что может быть какое-то состояние гонки.

1 Ответ

3 голосов
/ 21 ноября 2011

Это был ответ из комментариев на вопрос:

Есть ли у вас внутренний класс в вашей деятельности?Я внимательно прочитал трассировку исключения: сначала com.company.PictureListPictureListActivity.onCreate затем com.company.PictureListView.PictureListActivity.updateMainActivityScreen -> мне кажется, findViewById вызывается в другом объекте,Попробуйте переместить findViewByID в onCreate и проверьте, работает ли он там.

Кажется, в какой-то момент разработки был внутренний класс, который позже был удален.Каким-то образом файлы проекта не были обновлены соответствующим образом.Очистка проекта, обновление содержимого файловой системы и повторная сборка проекта должны исправить ситуацию.

...