Android TableLayout空指针异常

时间:2019-02-06 01:08:12

标签: android android-studio android-activity

我正在尝试在Android Studio中创建TableLayout。目前,我将表格放在应用程序的仪表板上,然后直接进行活动,而不是将其作为片段。

当我运行应用程序时,尝试对表执行任何操作时都会收到空指针异常。

我尝试清理和重建项目,并重新启动Android Studio无济于事。我在SO上查看了其他一些问题,这是我最初从哪里获得代码的地方,但找不到任何有相同错误的人。

作为另一个问题,我最好在一个新的片段中创建它,而不是直接进行该活动吗?

这是XML布局文件

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/dashboard_table"
    android:layout_gravity="center">

</TableLayout>

这是Java类

public void drawDashboard(){
        table = (TableLayout) findViewById(R.id.dashboard_table);
        table.setStretchAllColumns(true);

    for(int i = 0; i < classModuleList.size(); i++){
        TableRow row = new TableRow(this);
        TableRow.LayoutParams layout = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT);
        row.setLayoutParams(layout);

        TextView classText = new TextView(this);
        row.addView(classText);

        TextView moduleText = new TextView(this);
        row.addView(moduleText);

        ImageView isComplete = new ImageView(this);

        for(Map.Entry<String, Boolean> entry : moduleCompleteList.entrySet()){

            if(entry.getKey().equals(classModuleList.get(i))){

                if(moduleCompleteList.get(i) == true){
                    isComplete.setBackgroundResource(R.drawable.icon_complete);

                } else {
                    isComplete.setBackgroundResource(R.drawable.icon_white_not_started);
                }
            }
        }

        row.addView(isComplete);

        table.addView(row, i);

    }

这是错误

java.lang.RuntimeException: Unable to start activity ComponentInfo{teamingenium.ingeniummobileapplication/teamingenium.ingeniummobileapplication.activities.DashboardActivity}: java.lang.NullPointerException:     Attempt to invoke virtual method 'void android.widget.TableLayout.addView(android.view.View, int)' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TableLayout.addView(android.view.View, int)' on a null object reference
    at teamingenium.ingeniummobileapplication.activities.DashboardActivity.drawDashboard(DashboardActivity.java:201)
    at teamingenium.ingeniummobileapplication.activities.DashboardActivity.onCreate(DashboardActivity.java:77)
    performCreate(icicle, null);

2 个答案:

答案 0 :(得分:0)

我无法评论您的问题,但是您发布的代码未包含所有必需的信息。 问题:您在哪个活动生命周期回调中调用drawDashboard()?
注意:应在活动布局膨胀后调用它。

答案 1 :(得分:0)

我解决了这个问题。我将dashboard_table保存在单独的XML文件中,并且尚未将其添加到实际活动中。将TableLayout添加到活动XML中可以解决此问题。