在黑暗中这是一个镜头,但也许我犯了一个明显的错误; 我在main.xml中定义了一个LinearLayout,其id为“@ + 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()返回一个nullpointer。我尝试重新生成R.java,重命名LinearLayout(以确保我可以从访问它的位置进行控制;但它只能从这一个地方访问)。我尝试将代码放入onStart()中,认为onCreate可能运行得太早,创建了竞争条件,但也没有运气。我还确保LinearLayout确实被称为“imageListContainer”,它是(否则生成的R.java会出错并且javac会抱怨)并且在任何地方都没有重复的“imageListContainer”对象。
我很遗憾这可能是什么原因,所以我很感激任何建议或猜测。
这是stacktrace:
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:我尝试在GUI中添加一个按钮,然后在该按钮的回调中调用包含findViewById()的代码,这样就行了!这让我想到可能会出现一些竞争条件。
答案 0 :(得分:3)
这是问题评论的答案:
你的活动中有内在课吗?我读了例外 仔细追踪:首先 com.company.PictureListPictureListActivity.onCreate 然后 的 com.company.PictureListView.PictureListActivity.updateMainActivityScreen 强> - &GT;在我看来findViewById是在另一个对象中调用的。尝试将findViewByID移动到onCreate并检查它是否在那里工作。
似乎在某个发展阶段有一个内部阶级,后来被删除了。不知何故,项目文件未得到适当更新。清理项目,刷新文件系统内容以及重新构建项目应该会使事情再次正确。