【问题标题】:Android Studio. AddRule Null pointer Exception安卓工作室。 AddRule 空指针异常
【发布时间】:2018-02-26 19:25:43
【问题描述】:

Android Studio 中的 addRule 函数有问题。 我循环遍历语言的数组列表。 对于每种语言,我都添加了一个 Textview。添加 1 个文本视图后,下一个文本视图应与第一个文本视图对齐。我在 addrule 行收到 NullpointerException。我设置和获取视图 ID 的方式是否错误?抱歉,XML 不完整。整个 Xml 代码都在相对布局中。

private void listLanguages() {

    RelativeLayout relativelayout = (RelativeLayout) findViewById(R.id.addrole);
    int e;
    for (int i=0; i < languages.size(); i++) {
        TextView textview = new TextView(AddRole.this);
        if (i > 0) {
        e = i-1;
            RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) textview.getLayoutParams();
            lp.addRule(RelativeLayout.BELOW,e);
            textview.setLayoutParams(lp);
        }
        textview.setText(languages.get(i));
        textview.setId(i);
        relativelayout.addView(textview);

}

XML:

<include
    layout = "@layout/esnmis"
    android:id="@+id/esnmis"
    android:layout_width="match_parent"
    android:layout_height="55dp">
</include>

<TextView
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:inputType="textPersonName"
    android:layout_below="@+id/esnmis"
    android:textSize="30dp"
    android:gravity="center"
    android:id="@+id/description"
    android:layout_marginTop="4dp"
    android:layout_centerHorizontal="true" />

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/description"
    android:id="@+id/addrole">

</RelativeLayout>

<Button
    android:text=""
    android:textSize="20dp"
    android:textAllCaps="false"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/insert"
    android:layout_below="@+id/addrole"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="5dp" />

错误:

E/AndroidRuntime: 致命异常: main 进程:com.example.obo.database,PID:11262 java.lang.NullPointerException:尝试从空对象引用上的字段“int android.view.ViewGroup$LayoutParams.width”读取 在 android.view.ViewGroup$LayoutParams.(ViewGroup.java:7346) 在 android.view.ViewGroup$MarginLayoutParams.(ViewGroup.java:7643) 在 android.widget.RelativeLayout$LayoutParams.(RelativeLayout.java:1345) 在 com.example.obo.database.AddRole.listLanguages(AddRole.java:107) 在 com.example.obo.database.AddRole.access$300(AddRole.java:28) 在 com.example.obo.database.AddRole$1$1.run(AddRole.java:79) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:7331) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

【问题讨论】:

  • 你确定AddRole.java:107是这条线lp.addRule(RelativeLayout.BELOW,e);吗?如果是这样,我猜lp 什么都不是。你确定吗?在这一行放一个断点,查看textview.getLayoutParams()。我猜这是一个空对象。
  • 您以编程方式创建了 TextView,因此您还必须创建 LayoutParameters 并将它们添加到您的 TextView。
  • 正如 shadowsheep 提到的,您还必须创建 LayoutParamsViews 不会自动拥有LayoutParams。此外,您的 ID 必须至少为 1。如果您尝试使用 ID 为 0 的兄弟创建相对规则,它将被忽略。
  • 非常感谢。这些信息很有帮助。

标签: android loops android-studio nullpointerexception


【解决方案1】:

感谢 shadowsheep 和 Mike M。我的应用再次运行良好。这是其他有相同问题的人的解决方案:

private void listLanguages() {

RelativeLayout relativelayout = (RelativeLayout) findViewById(R.id.addrole);
int e;
for (int i=1; i < languages.size() + 1; i++) {
    TextView textview = new TextView(AddRole.this);
    if (i > 1) {
    e = i-1;
        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        lp.addRule(RelativeLayout.BELOW,e);
        textview.setLayoutParams(lp);
    }
    textview.setText(languages.get(i - 1));
    textview.setId(i);
    relativelayout.addView(textview);

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2017-04-17
    • 2014-04-30
    相关资源
    最近更新 更多