加载Activity时第一次获取NullPointerException,但第二次运行良好

时间:2019-10-24 06:04:07

标签: java android

我从EditCardActivity开始MainActivity

该应用首次崩溃,Android系统显示“再次打开应用”警报。

当我重新打开该应用程序时,它可以正常工作。

我在此站点上看到了很多答案,并且已经按照这些答案进行了跟踪,但是没有用。

  • 在调用setContentView()之前,我已经在onCreate()方法中调用了findViewByID()

  • 我已验证我在findViewByID()中传递的ID拼写正确。

  • 我也尝试将EditText设为类成员,并使用onCreate()方法对其进行初始化。

  • 我也尝试使用onStart()onPostCreate()方法。

  • 当我尝试调用View时,我认为View尚未加载,因此findViewByID()返回null。因此,我尝试使用Thread.sleep(1000)使其加载1秒,但仍然存在相同的问题。

这是有问题的代码部分。

// MainActivity.java
public void editCard(View v) {
    Intent i = new Intent(this, EditCardActivity.class);
    startActivity(i);
}
<!--activity_edit_card.xml-->
...
<EditText
    android:id="@+id/add_card_category_et"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/margin"
    android:ems="10"
    android:hint="@string/add_card_category_et_hint"
    android:inputType="text"
    android:textSize="@dimen/font_size" />
...
// EditCardActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_edit_card);

    showContents();
}

private void showContents() {
    EditText editCardCategoryET = findViewById(R.id.add_card_category_et);
    editCardCategoryET.setText(currentCard.getCategory()); // This line is throwing NullPointerException
}

错误

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

编辑:

我知道是什么导致了错误。

我指的是add_card_category_et而不是edit_card_category_et

前一个视图属于我的应用程序另一个Activity的不同布局文件。

对不起,我无法捕捉到这个小错误。

虽然很小,但它让我停留了三天。

无论如何,感谢您的回答和评论。

1 个答案:

答案 0 :(得分:-1)

因为editCardCategoryET找不到任何值。因此它抛出 Exception 。可以通过添加“”来添加额外的字符来解决。然后,应用程序将不会崩溃。 editCardCategoryET.setText(" "+currentCard.getCategory());

您也可以使用try(),catch()方法来处理它。