使用 android时发生NullPointerException

| 我有一个显示游戏屏幕的活动。 UI元素之一是计分框。分数框基本上是具有四行的表格布局。所有行都是相同的,这里是表示一行的xml。
<TableRow
    xmlns:android=\"http://schemas.android.com/apk/res/android\"
    android:layout_width=\"match_parent\"
    android:layout_height=\"match_parent\">

    <ImageView
        android:id=\"@+id/farkle_image\"
        android:src=\"@drawable/icon\"
        android:layout_height=\"wrap_content\"
        android:layout_width=\"wrap_content\"
        android:layout_weight=\"1\" />
    <TextView
        android:id=\"@+id/name_text\"
        android:layout_weight=\"1\"
        android:layout_height=\"wrap_content\"
        android:layout_width=\"wrap_content\"
        android:text=\"Name\" />
    <TextView
        android:id=\"@+id/temp_score_text\"
        android:layout_weight=\"1\"
        android:layout_height=\"wrap_content\"
        android:layout_width=\"wrap_content\"
        android:text=\"Temp Score\" />
    <TextView
        android:id=\"@+id/score_text\"
        android:layout_weight=\"1\"
        android:layout_height=\"wrap_content\"
        android:layout_width=\"wrap_content\"
        android:text=\"Score\" />
</TableRow>
然后,每一行都有imageview,代表玩家名称的textview和代表各种得分的其他两个textview。 这是我在活动使用的布局中执行的操作:
<TableLayout
        android:id=\"@+id/score_box\"
        android:layout_width=\"fill_parent\"
        android:layout_height=\"fill_parent\"
        android:layout_below=\"@+id/score_button\">

        <include
            layout=\"@layout/score_box_row\"
            android:id=\"@+id/row_1\" />

        <include
            layout=\"@layout/score_box_row\"
            android:id=\"@+id/row_2\"
            android:layout_below=\"@+id/row_1\" />

        <include
            layout=\"@layout/score_box_row\"
            android:id=\"@+id/row_3\"
            android:layout_below=\"@+id/row_2\" />

        <include
            android:id=\"@+id/row_4\"
            layout=\"@layout/score_box_row\"
            android:layout_below=\"@+id/row_3\" />

    </TableLayout>
该游戏可以玩2到4个玩家,因此我想到的是将Rows的Visibility设置为View.GONE,而没有相应的玩家。 唯一的问题是我无法“找到”行。 findViewById()返回null。在setContentView()之后立即从onCreate()调用此方法。
private void initializeArrays() {

        TableLayout table = (TableLayout) findViewById(R.id.score_box);
        Log.w(getClass().getName(), \"Child Count: \" + table.getChildCount());

        rows = ArrayList<TableRow>();    
        rows.add((TableRow) findViewById(R.id.row_1)); //Line 95
        rows.add((TableRow) findViewById(R.id.row_2));
        rows.add((TableRow) findViewById(R.id.row_3));
        rows.add((TableRow) findViewById(R.id.row_4));

        letters[0] = R.drawable.f;
        letters[1] = R.drawable.a;
        letters[2] = R.drawable.r;
        letters[3] = R.drawable.k;
        letters[4] = R.drawable.l;
        letters[5] = R.drawable.e;

    }
我总是在运行时得到NullPointerException。之所以有TableRows,是因为table.getChildCount()返回4。我不确定这是怎么回事。 这是android的bug还是eclipse的bug? 编辑:根据要求这里是堆栈:
06-14 15:59:40.437: WARN/dalvikvm(1587): threadid=1: thread exiting with uncaught exception (group=0x40015560)
06-14 15:59:40.441: ERROR/AndroidRuntime(1587): FATAL EXCEPTION: main
06-14 15:59:40.441: ERROR/AndroidRuntime(1587): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mikgonz.farkle/com.mikgonz.farkle.ui.GameScreen}: java.lang.NullPointerException
06-14 15:59:40.441: ERROR/AndroidRuntime(1587):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
06-14 15:59:40.441: ERROR/AndroidRuntime(1587):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
06-14 15:59:40.441: ERROR/AndroidRuntime(1587):     at android.app.ActivityThread.access$1500(ActivityThread.java:123)
06-14 15:59:40.441: ERROR/AndroidRuntime(1587):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
06-14 15:59:40.441: ERROR/AndroidRuntime(1587):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-14 15:59:40.441: ERROR/AndroidRuntime(1587):     at android.os.Looper.loop(Looper.java:130)
06-14 15:59:40.441: ERROR/AndroidRuntime(1587):     at android.app.ActivityThread.main(ActivityThread.java:3835)
06-14 15:59:40.441: ERROR/AndroidRuntime(1587):     at java.lang.reflect.Method.invokeNative(Native Method)
06-14 15:59:40.441: ERROR/AndroidRuntime(1587):     at java.lang.reflect.Method.invoke(Method.java:507)
06-14 15:59:40.441: ERROR/AndroidRuntime(1587):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
06-14 15:59:40.441: ERROR/AndroidRuntime(1587):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
06-14 15:59:40.441: ERROR/AndroidRuntime(1587):     at dalvik.system.NativeStart.main(Native Method)
06-14 15:59:40.441: ERROR/AndroidRuntime(1587): Caused by: java.lang.NullPointerException
06-14 15:59:40.441: ERROR/AndroidRuntime(1587):     at com.mikgonz.farkle.ui.GameScreen.initializeArrays(GameScreen.java:95)
06-14 15:59:40.441: ERROR/AndroidRuntime(1587):     at com.mikgonz.farkle.ui.GameScreen.onCreate(GameScreen.java:48)
06-14 15:59:40.441: ERROR/AndroidRuntime(1587):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-14 15:59:40.441: ERROR/AndroidRuntime(1587):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
06-14 15:59:40.441: ERROR/AndroidRuntime(1587):     ... 11 more
    
已邀请:
        首先,看起来应该是
rows = new ArrayList<TableRow>();
我很惊讶该行是否已编译。 另外,这将是一个愚蠢的错误,请确保actually5ѭ布局文件确实存在并正确定义了布局。     
        看来您的score_box使用
android:layout_width=\"fill_parent\"
,而主TableLayout使用using7ѭ。其中之一可能不正确,这将阻止XML正确编译。 我尝试了您的应用程序,并根据SDK 2.1进行了编译,并使用\“ fill_parent \”作为这两个值,并且可以正常工作。     
        
findViewById(R.id.row_1)
可能会返回
null
。您是否叫
setContentView()
等,以便该ID实际上在视图中?您找不到带有
findViewById()
的任何随机ID,它看起来特别是在当前设置的contentView中,或者是您添加到其中的东西。     

要回复问题请先登录注册